在plsql

时间:2018-09-19 07:41:34

标签: plsql

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

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

             else NULL END AS IsCustomer

有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

布尔值不适用于SQL,但可以用于PL / SQL(因为那里存在数据类型 )。

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

SQL> create table tca (is_customer varchar2(1));

Table created.

SQL> insert into tca values ('1');

1 row created.

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>

答案 1 :(得分:0)

不太清楚过程中需要什么,但是如果您只是读取数据并且只想将其解释为布尔值,并在过程中使用该布尔数据,则可以: 首先,在您的过程中声明一个布尔变量。 (您将在case语句中使用它。) 第二,在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;