将布尔值转换为 Varchar2

问题描述 投票:0回答:5

我有一个示例代码,我试图在其中打印布尔值。 结果出现错误。

调用“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
有什么。

plsql oracle11g
5个回答
23
投票

看来你不能连接

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));

15
投票

作为替代方案,我一直在使用 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
)。


2
投票

您无法打印布尔变量。为此,您可以创建函数或用例语句。

在 Oracle SQL 中没有布尔数据类型。它是一种 PL/SQL 数据类型。这意味着您不能将其作为表列的数据类型。

为什么不可能?

也许是因为没有 ANSI。


2
投票

如果您在 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;

0
投票

Oracle 23c 中似乎有一个新的变体 TO_CHAR(boolean)。 https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/to_char-boolean.html

© www.soinside.com 2019 - 2024. All rights reserved.