我有一个示例代码,我试图在其中打印布尔值。 结果出现错误。
调用“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
有什么。
看来你不能连接
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));
作为替代方案,我一直在使用 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
)。
您无法打印布尔变量。为此,您可以创建函数或用例语句。
在 Oracle SQL 中没有布尔数据类型。它是一种 PL/SQL 数据类型。这意味着您不能将其作为表列的数据类型。
为什么不可能?
也许是因为没有 ANSI。
如果您在 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;
Oracle 23c 中似乎有一个新的变体 TO_CHAR(boolean)。 https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/to_char-boolean.html