我有一个示例代码,我正在尝试打印布尔值。 它导致了错误。
调用'PUT_LINE'时参数的数目或类型错误
调用'TO_CHAR'
时参数的数量或类型错误
DECLARE
status BOOLEAN:= false;
BEGIN
DBMS_OUTPUT.PUT_LINE(status);
DBMS_OUTPUT.PUT_LINE(to_char(status));
END;
通过错误消息,很明显布尔不能以两种方式转换为字符(隐式,显式)。
为什么不可能?
他们的具体原因是什么?或Oracle只是忘记了这种类型的转换(它极不可能)。
他们还有其他转换方式吗?或者我必须使用IF
或CASE
语句来猜测status
有什么。
答案 0 :(得分:13)
您似乎无法连结varchar
和boolean
。
定义此功能:
CREATE OR REPLACE FUNCTION BOOLEAN_TO_CHAR(STATUS IN BOOLEAN)
RETURN VARCHAR2 IS
BEGIN
RETURN
CASE STATUS
WHEN TRUE THEN 'TRUE'
WHEN FALSE THEN 'FALSE'
ELSE 'NULL'
END;
END;
并像这样使用它:
DBMS_OUTPUT.PUT_LINE('status'|| BOOLEAN_TO_CHAR(status));
答案 1 :(得分:2)
您无法打印布尔变量。为此,您可以创建函数或用例语句。
在Oracle SQL中,没有布尔数据类型。它是PL / SQL数据类型。这意味着您不能将它作为表列的数据类型。
为什么不可能?
也许是因为它不存在ANSI。
答案 2 :(得分:0)
作为替代方案,我一直在使用SYS.DIUTIL包的BOOL_TO_INT()
函数:
DECLARE
status BOOLEAN:= false;
BEGIN
DBMS_OUTPUT.PUT_LINE(sys.diutil.bool_to_int(status));
END;
这将为1
返回true
,为0
返回false
(对于null
返回null
)。
答案 3 :(得分:0)
如果在 APEX 中使用,请检查 APEX_DEBUG.TOCHAR() https://docs.oracle.com/en/database/oracle/application-express/20.2/aeapi/TOCHAR-Function.html
-- https://docs.oracle.com/en/database/oracle/application-express/20.2/aeapi/TOCHAR-Function.html
SET SERVEROUTPUT ON SIZE 2000
BEGIN
DBMS_OUTPUT.PUT_LINE(APEX_DEBUG.TOCHAR(TRUE));
END;