如何在SELECT语句中使用BOOLEANtypes
我有BOOLEAN参数中的PL / SQL函数:
function get_something(name in varchar2, ignore_notfound in boolean);
这个function是第三方工具的一部分,我不能改变这个。
我想在这样的SELECT语句中使用这个函数:
select get_something('NAME', TRUE) from dual;
这不起作用,我得到这个例外:
ORA-00904:“真”:无效的标识符
据我所知,关键字TRUE
不被识别。
我怎样才能做这个工作?
你可以像这样构build一个包装函数:
function get_something(name in varchar2, ignore_notfound in varchar2) return varchar2 is begin return get_something (name, (upper(ignore_notfound) = 'TRUE') ); end;
然后打电话:
select get_something('NAME', 'TRUE') from dual;
这取决于你的版本中ignore_notfound的有效值是什么,我假定“TRUE”表示TRUE,其他的意思是FALSE。
你绝对可以从SELECT查询中获得布尔值,你不能使用布尔数据types。
你可以用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
返回值1(在Hibernate / Mybatis / etc 1中为true)。 否则,您可以从SELECT中获取可打印的布尔值。
SELECT CASE WHEN (10 > 0) THEN 'true' ELSE 'false' END AS MY_BOOLEAN_COLUMN FROM DUAL
这将返回string'true'
。
从文档 :
您不能将值
TRUE
和FALSE
插入到数据库列中。 您不能select或将列值读取到BOOLEAN
variables中。 从SQL
查询中调用的函数不能使用任何BOOLEAN
参数。 既不能内置SQL
函数,如TO_CHAR
; 要在输出中表示BOOLEAN
值,必须使用IF-THEN
或CASE
结构将BOOLEAN
值转换为其他types,例如0
或1
,'Y'
或'N'
,'true'
或'false'
等等。
您需要制作一个包含SQL
数据types的包装函数,然后使用它。
BOOLEAN数据types是PL / SQL数据types。 Oracle不提供等效的SQL数据types(…),您可以创build一个将SQLtypes映射到BOOLEANtypes的包装函数。
检查此: http : //forums.datadirect.com/ddforums/thread.jspa?threadID=1771&tstart=0&messageID=5284
select get_something('NAME', sys.diutil.int_to_bool(1)) from dual;
编译这个在你的数据库中,并开始在查询中使用布尔语句。
注意:函数get的varchar2参数,所以一定要在你的语句中包装任何“string”。 它将返回1为真,0为假;
select bool('''abc''<''bfg''') from dual; CREATE OR REPLACE function bool(p_str in varchar2) return varchar2 is begin execute immediate ' begin if '||P_str||' then :v_res := 1; else :v_res := 0; end if; end;' using out v_res; return v_res; exception when others then return '"'||p_str||'" is not a boolean expr.'; end; /
PL / SQL抱怨TRUE不是一个有效的标识符或variables。 设置一个局部variables,将其设置为TRUE,并将其传递给get_something函数。
如何使用expression式评估为TRUE(或FALSE)?
select get_something('NAME', 1 = 1) from dual