Ula*_*kar 55 sql oracle plsql oracle10g ora-00904
我在参数中有一个带有BOOLEAN的PL/SQL函数:
function get_something(name in varchar2, ignore_notfound in boolean);
Run Code Online (Sandbox Code Playgroud)
此功能是第三方工具的一部分,我无法改变这一点.
我想在SELECT语句中使用这个函数,如下所示:
select get_something('NAME', TRUE) from dual;
Run Code Online (Sandbox Code Playgroud)
这不起作用,我得到这个例外:
ORA-00904:"TRUE":标识符无效
据我了解,关键字TRUE
无法识别.
我怎样才能做到这一点?
Ash*_*Ash 47
您绝对可以从SELECT查询中获取布尔值,您只能使用布尔数据类型.
您可以使用1/0表示布尔值.
CASE WHEN (10 > 0) THEN 1 ELSE 0 END (It can be used in SELECT QUERY)
SELECT CASE WHEN (10 > 0) THEN 1 ELSE 0 END AS MY_BOOLEAN_COLUMN
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
返回1(在Hibernate/Mybatis/etc 1中为真).否则,您可以从SELECT获取可打印的布尔值.
SELECT CASE WHEN (10 > 0) THEN 'true' ELSE 'false' END AS MY_BOOLEAN_COLUMN
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
这将返回字符串'true'
.
Ton*_*ews 28
你可以构建一个这样的包装器函数:
function get_something(name in varchar2,
ignore_notfound in varchar2) return varchar2
is
begin
return get_something (name, (upper(ignore_notfound) = 'TRUE') );
end;
Run Code Online (Sandbox Code Playgroud)
然后打电话:
select get_something('NAME', 'TRUE') from dual;
Run Code Online (Sandbox Code Playgroud)
这取决于你的版本中ignore_notfound的有效值是什么,我假设'TRUE'表示TRUE,其他任何表示FALSE.
BOOLEAN数据类型是PL/SQL数据类型.Oracle不提供等效的SQL数据类型(...),您可以创建一个将SQL类型映射到BOOLEAN类型的包装函数.
请查看:http://forums.datadirect.com/ddforums/thread.jspa?threadID = 1771&tstart = 0&messageID = 5284