【发布时间】:2018-06-01 13:50:17
【问题描述】:
我有一个参数为 BOOLEAN 的 PL/SQL 函数:
function get_something(name in varchar2, ignore_notfound in boolean);
此功能是第三方工具的一部分,我无法更改。
我想在这样的 SELECT 语句中使用这个函数:
select get_something('NAME', TRUE) from dual;
这不起作用,我得到了这个异常:
ORA-00904:“TRUE”:标识符无效
据我了解,关键字TRUE 无法识别。
我怎样才能做到这一点?
【问题讨论】:
-
我为 Oracle 感到尴尬,您甚至无法在 SQL 语句中与从 PL/SQL 块返回的布尔值进行比较。您甚至不能将这样的函数包装在
CASE语句中。唯一明智的答案是将数据库升级到 PostgreSQL,它可以很好地处理 SQL 语句中的布尔值。 -
这并不完全正确。使用内置的 sys.diutil.bool_to_int 将 BOOLEAN 转换为 INTEGER 0 或 1。在存储过程中,使用 BOOLEAN 变量没有问题,但这并不是这里真正关心的问题......
标签: sql oracle plsql oracle10g ora-00904