如何在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'

从文档 :

您不能将值TRUEFALSE插入到数据库列中。 您不能select或将列值读取到BOOLEANvariables中。 从SQL查询中调用的函数不能使用任何BOOLEAN参数。 既不能内置SQL函数,如TO_CHAR ; 要在输出中表示BOOLEAN值,必须使用IF-THENCASE结构将BOOLEAN值转换为其他types,例如01'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