如何在SELECT语句中使用BOOLEAN类型

21 浏览
0 Comments

如何在SELECT语句中使用BOOLEAN类型

我有一个带有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没有被识别。

我该如何使其工作?

0
0 Comments

在SELECT语句中使用BOOLEAN类型的问题是因为数据库列不能插入TRUE和FALSE的值,也不能将列值选择或提取到BOOLEAN变量中。从SQL查询中调用的函数不能接受任何BOOLEAN参数,也不能使用内置的SQL函数如TO_CHAR来表示BOOLEAN值的输出。为了表示BOOLEAN值的输出,必须使用IF-THEN或CASE结构将BOOLEAN值转换为其他类型,如0或1、'Y'或'N'、'true'或'false'等。

为了解决这个问题,你需要创建一个包装函数来接受SQL数据类型,并在SELECT语句中使用该函数代替BOOLEAN类型。

以下是一个示例代码,展示了如何创建一个包装函数来处理BOOLEAN类型的值:

CREATE OR REPLACE FUNCTION boolean_wrapper(p_value BOOLEAN)

RETURN VARCHAR2

IS

BEGIN

IF p_value THEN

RETURN 'true';

ELSE

RETURN 'false';

END IF;

END;

然后,在SELECT语句中使用boolean_wrapper函数来表示BOOLEAN值的输出:

SELECT boolean_wrapper(column_name) FROM table_name;

通过创建一个包装函数并在SELECT语句中使用它,你可以解决在SELECT语句中使用BOOLEAN类型的问题,并将BOOLEAN值转换为其他类型进行输出。

0
0 Comments

在使用SELECT语句中,有关BOOLEAN类型的问题是如何使用BOOLEAN类型。这个问题的出现原因是Oracle数据库在SELECT语句中不支持直接使用BOOLEAN类型,需要通过一些额外的操作来实现。下面是解决这个问题的方法:

你可以构建一个包装函数,如下所示:

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。

这是一个非常愚蠢的限制,我很好奇Oracle如何在技术上进行解释。

实际上,Ask Tom(Oracle的官方问答平台)在他的回答中表示,char(1)('Y'/'N')"具有相同的作用"。

F_IS_YES - 可以在任何Oracle SQL中调用 用法:SELECT * FROM WHATEVER WHEN F_IS_YES(SOMECOL)=1; 有些限制。可以使用内置函数来实现吗?创建或替换函数F_IS_YES(pVal IN VARCHAR2)返回INTEGER is begin return(sys.diutil.bool_to_int(kdot_blp_util.f_is_yes(pVal))); EXCEPTION WHEN OTHERS THEN return 0; -- 不愿意遵从你的请求 - 表示NO end F_IS_YES; 我使用了以下VARCHAR2值尝试了一下,它们都返回了预期的0或1:YES NO Y N T F y n true false

以上就是如何在SELECT语句中使用BOOLEAN类型的问题的出现原因和解决方法。

0
0 Comments

如何在SELECT语句中使用BOOLEAN类型

在SELECT查询中,你绝对可以获取布尔值,只是不能直接使用布尔数据类型。你可以使用1/0来表示布尔值。

CASE WHEN (10 > 0) THEN 1 ELSE 0 END(它可以在SELECT查询中使用)
SELECT CASE WHEN (10 > 0) THEN 1 ELSE 0 END AS MY_BOOLEAN_COLUMN FROM DUAL

这将返回1(在Hibernate/Mybatis等中,1表示true)。否则,你可以从SELECT中获取可打印的布尔值。

SELECT CASE WHEN (10 > 0) THEN 'true' ELSE 'false' END AS MY_BOOLEAN_COLUMN FROM DUAL

这将返回字符串'true'。

然而,这些与问题无关。问题不是“如何使用数字代替布尔值”。

0