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