将Boolean转换为Varchar2

时间:2016-01-21 12:11:24

标签: plsql oracle11g

我有一个示例代码,我正在尝试打印布尔值。 它导致了错误。

  

调用'PUT_LINE'时参数的数目或类型错误

     

调用'TO_CHAR'

时参数的数量或类型错误
DECLARE
    status BOOLEAN:= false;
    BEGIN
      DBMS_OUTPUT.PUT_LINE(status);
      DBMS_OUTPUT.PUT_LINE(to_char(status));
    END;

通过错误消息,很明显布尔不能以两种方式转换为字符(隐式,显式)。

为什么不可能?

他们的具体原因是什么?或Oracle只是忘记了这种类型的转换(它极不可能)。

他们还有其他转换方式吗?或者我必须使用IFCASE语句来猜测status有什么。

4 个答案:

答案 0 :(得分:13)

您似乎无法连结varcharboolean

定义此功能:

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;