Plsql 将布尔值转换为Varchar2

Plsql 将布尔值转换为Varchar2,plsql,oracle11g,Plsql,Oracle11g,我有一个示例代码,我试图打印布尔值。 这导致了错误 调用“PUT_LINE”时参数的数量或类型错误 调用“to_CHAR”时参数的数目或类型错误 通过错误消息可以清楚地看出,布尔值不能以两种方式(隐式、显式)转换为字符 为什么不可能呢 他们有什么具体原因吗?或者Oracle只是忘记了这种类型的转换(可能性很小) 那么,他们还有其他的转化方式吗?或者我是否必须使用IF或CASE语句来猜测状态有什么 似乎您无法处理varchar和boolean 定义此功能: CREATE OR REPLACE FU

我有一个示例代码,我试图打印布尔值。 这导致了错误

调用“PUT_LINE”时参数的数量或类型错误

调用“to_CHAR”时参数的数目或类型错误

通过错误消息可以清楚地看出,布尔值不能以两种方式(隐式、显式)转换为字符

为什么不可能呢

他们有什么具体原因吗?或者Oracle只是忘记了这种类型的转换(可能性很小)


那么,他们还有其他的转化方式吗?或者我是否必须使用
IF
CASE
语句来猜测
状态
有什么

似乎您无法处理
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;
DECLARE
status BOOLEAN:= false;
BEGIN
  DBMS_OUTPUT.PUT_LINE(sys.diutil.bool_to_int(status));
END;
然后像这样使用它:

DBMS_OUTPUT.PUT_LINE('status'|| BOOLEAN_TO_CHAR(status));

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

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

为什么不可能呢


可能是因为没有ANSI。

作为替代方案,我一直在使用SYS.DIUTIL包的
BOOL\u TO\u INT()
函数:

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;
DECLARE
status BOOLEAN:= false;
BEGIN
  DBMS_OUTPUT.PUT_LINE(sys.diutil.bool_to_int(status));
END;

对于
true
这将返回
1
,对于
false
这将返回
0
(对于
null
,这将返回
null
)。

如果您在APEX中使用它,请检查APEX_DEBUG.TOCHAR()


布尔值到字符串的转换应该是什么?TRUE应该改为“TRUE”、“TRUE”、“TRUE”、“T”、“T”、“YES”、“YES”、“YES”、“Y”、“Y”,还是改为数字:1?基本上,由个人决定布尔值的字符串(或数字!)表示形式是什么,因为它可能因上下文而异。请确保您接受正确的答案:)