始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

Oracle sql语句中不支持boolean类型(decode&case)

发布时间:  2012/9/7 16:50:12

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转换输出。

 


本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线