在plsql中将数据类型CHAR转换为数据类型boolean

在plsql中将数据类型CHAR转换为数据类型boolean,plsql,Plsql,我在oracle中有一个表,其中一列可以包含两个值0或1,数据类型为CHAR的列,我创建了一个过程,通过id从该表中获取记录,我想获取该CHAR列的布尔值,这意味着如果列值为0,则为false,如果为1,则为true,如何在oracle中进行字符和布尔值之间的转换?我试过跟随,但没有成功 CASE (TCA.IS_CUSTOMER) WHEN '0' then FALSE WHEN '1' then true

我在oracle中有一个表,其中一列可以包含两个值0或1,数据类型为CHAR的列,我创建了一个过程,通过id从该表中获取记录,我想获取该CHAR列的布尔值,这意味着如果列值为0,则为false,如果为1,则为true,如何在oracle中进行字符和布尔值之间的转换?我试过跟随,但没有成功

 CASE (TCA.IS_CUSTOMER) 
             WHEN '0' then FALSE
             WHEN '1' then true 

             else NULL END AS IsCustomer

有什么帮助吗?

Boolean不适用于SQL,但适用于PL/SQL(因为该数据类型存在)

下面是一个示例:首先创建一个表,然后执行一些(PL/)SQL:

直接选择布尔变量:

SQL> declare
  2    is_customer boolean;
  3  begin
  4    select case tca.is_customer when '0' then false
  5                                when '1' then true
  6                                else null
  7           end
  8      into is_customer
  9      from tca
 10      where rownum = 1;
 11  end;
 12  /
                              when '1' then true
                                            *
ERROR at line 5:
ORA-06550: line 5, column 45:
PL/SQL: ORA-00904: "TRUE": invalid identifier
ORA-06550: line 4, column 3:
PL/SQL: SQL Statement ignored
首先在局部变量中选择列值,然后检测其布尔值:

SQL> declare
  2    tca_is_customer varchar2(1) := '1';
  3    is_customer     boolean;
  4  begin
  5    select is_customer
  6      into tca_is_customer
  7      from tca
  8      where rownum = 1;
  9
 10    is_customer := case tca_is_customer when '0' then false
 11                                        when '1' then true
 12                                        else null
 13                   end;
 14  end;
 15  /

PL/SQL procedure successfully completed.

SQL>

不太确定您在过程中需要什么,但如果您只是在读取数据,并且只想将其解释为布尔值,并在过程中使用该布尔值数据,那么您可以: 首先,在过程中声明一个布尔变量。(您将在案例陈述中使用此选项。) 第二个,在THEN语句中,可以根据所读取的值为声明的布尔值赋值FALSE或TRUE

参见下面的示例。希望这有帮助。:)

示例:

DECLARE
  v_boolean BOOLEAN := FALSE /*default value for the boolean*/
  ...

BEGIN
  ...

  /*this case will return v_boolean as TRUE if value of TCA.IS_CUSTOMER is 1, else it will return FALSE*/
  CASE (TCA.IS_CUSTOMER) 
     WHEN 1 then 
        v_boolean := TRUE;
     ELSE
        v_boolean := FALSE; 
  END CASE;

  ...

END;

请向我们显示您的完整存储过程Resorry无法显示它,但它是一个简单的getbyid过程,请从id=id的表中选择col1、col2、col3,然后选择此字符串列。顺便说一下,
case
语法不需要括号。
DECLARE
  v_boolean BOOLEAN := FALSE /*default value for the boolean*/
  ...

BEGIN
  ...

  /*this case will return v_boolean as TRUE if value of TCA.IS_CUSTOMER is 1, else it will return FALSE*/
  CASE (TCA.IS_CUSTOMER) 
     WHEN 1 then 
        v_boolean := TRUE;
     ELSE
        v_boolean := FALSE; 
  END CASE;

  ...

END;