Oracle sql语句中不支持boolean类型(decode&case)
2015-02-15 14:32
549 查看
[转自] http://blog.csdn.net/t0nsha/article/details/7828538
Oracle sql语句中不支持boolean类型(decode&case)
版本信息:
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
PL/SQL Release 11.1.0.7.0 - Production
CORE 11.1.0.7.0 Production
TNS for Linux: Version 11.1.0.7.0 - Production
NLSRTL Version 11.1.0.7.0 - Production
假设我们现在想知道1>0是否为真:
直接查,不行!
用decode转,还是不行!
用case转,依旧不行!
原因在于sql不支持boolean类型(手头没有其他库,不知道mysql和sqlserver是否支持):
直接放sql语句中行不通,试着放到fuction里:
decode还是出错:
case完美通过:
小结:
1. Oracle sql语句中不支持boolean类型;
2. decode是oracle独有的;而case是标准sql,mysql和sqlserver也可以使用,而且case还能把boolean转换输出。
REF:
1.Decode function to Oracle 7
http://www.groupsrv.com/computers/about56979.html
Oracle sql语句中不支持boolean类型(decode&case)
版本信息:
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
PL/SQL Release 11.1.0.7.0 - Production
CORE 11.1.0.7.0 Production
TNS for Linux: Version 11.1.0.7.0 - Production
NLSRTL Version 11.1.0.7.0 - Production
假设我们现在想知道1>0是否为真:
直接查,不行!
SQL> select 1>0 from dual; select 1>0 from dual * ERROR at line 1: ORA-00923: FROM keyword not found where expected
用decode转,还是不行!
SQL> select decode(1>0,true,'true','false') from dual; select decode(1>0,true,'true','false') from dual * ERROR at line 1: ORA-00907: missing right parenthesis
用case转,依旧不行!
SQL> select case 1>0 when true then 'true' else 'false' end from dual; select case 1>0 when true then 'true' else 'false' end from dual * ERROR at line 1: ORA-00923: FROM keyword not found where expected
原因在于sql不支持boolean类型(手头没有其他库,不知道mysql和sqlserver是否支持):
SQL> create or replace function is_true return boolean is begin return true; end; / Function created. SQL> select is_true from dual; select is_true from dual * ERROR at line 1: ORA-06552: PL/SQL: Statement ignored ORA-06553: PLS-382: expression is of wrong type
直接放sql语句中行不通,试着放到fuction里:
decode还是出错:
SQL> CREATE OR REPLACE FUNCTION is1gt0 RETURN VARCHAR2 IS BEGIN RETURN DECODE (1 > 0, TRUE, 'true', 'false'); END; / Warning: Function created with compilation errors. SQL> show err; Errors for FUNCTION IS1GT0: LINE/COL ERROR -------- ----------------------------------------------------------------- 5/3 PL/SQL: Statement ignored 5/10 PLS-00306: wrong number or types of arguments in call to 'DECODE' SQL>
case完美通过:
SQL> CREATE OR REPLACE FUNCTION is1gt0 RETURN VARCHAR2 IS BEGIN RETURN CASE 1 > 0 WHEN TRUE THEN 'true' ELSE 'false' END; END; / Function created. SQL> show err; No errors. SQL> select is1gt0 from dual; IS1GT0 -------------------------------------------------------------------------------- true SQL>
小结:
1. Oracle sql语句中不支持boolean类型;
2. decode是oracle独有的;而case是标准sql,mysql和sqlserver也可以使用,而且case还能把boolean转换输出。
REF:
1.Decode function to Oracle 7
http://www.groupsrv.com/computers/about56979.html
相关文章推荐
- Oracle sql语句中不支持boolean类型(decode&case)
- Oracle的sql语句中case关键字的用法 & 单双引号的使用
- ORACLE PL/SQL 也支持GOTO语句
- Oracle-Decode()函数和CASE语句的不同
- oracle的结果输出单引号 ' 的字符 的sql语句
- ORACLE SQL语句中的“SWITCH语句”函数DECODE
- Oracle不支持在select语句中调用自定义函数时使用自定义类型作参数?
- Oracle的SQL语句中如何处理‘&’符号
- 在oracle的PL程序块中执行一个varchar2类型变量中的sql 语句
- 诸如可更新、可滚动游标及符合ANSI的CASE语句、日期一时间数据类型和连接语法之类的特性便从将在其他数据库上开发的应用程序移植到Oracle 9i中
- oracle -- case语句--decode and sign 函数
- oracle中使用SQL语句修改字段类型
- Oracle Decode()函数和CASE语句的比较
- 解决Hibernate 3不支持 "&" 运算的SQL语句
- 给定一个一oracle建表的sql语句,解析读出的字符串,将表名、字段名、字段类型数据取出,怎么实现啊?
- SQL2005 修改默认值语句不支持W3C标准,Alter column set default doesn't work in T-SQL 2005
- 如何替换掉日期类型值为空时的默认日期? SQL语句Replace的应用和Case when 的用法。
- SQL语句oracle中如何插入Date类型的数据
- 比较值得学习的sql语句_decode,to_char,TO_CHAR(sysdate,'MM'),(t.end_date,'HH24')>=21
- Oracle-Decode()函数和CASE语句的不同