您好,欢迎访问一九零五行业门户网

Oracle sql语句中不支持boolean类型(decodecase)

1. oracle sql语句中不支持boolean类型;2. decode是oracle独有的;而case是标准sql,mysql和sqlserver也可以使用,而且case还能
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转换输出。
其它类似信息

推荐信息