我在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
有什么帮助吗?
答案 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;