我写了一个简单的pl\sql过程来读取数据库上的值。对于相同的值,我使用两个不同的函数在末尾具有不同的值。
我的代码
begin
select TRIM(SUBSTR(RPAD(VAL,30,'N'),1,1)),DECODE(TRIM(SUBSTR(RPAD(VAL,30,'N'),2,2)),'S',TRUE,FALSE)
into va_flag, amount_zero
from ENV
where USER = 'C' and VARIABLE = 'FLAG_BALANCE';
exception
when others then
amount_zero := FALSE;
va_flag := 'N';
end;
当我编译该过程时,我在解码函数上收到错误消息:"ORA-00904"FALSE"无效标识符"。 amount_zero是一个布尔值。
不幸的是,它不会直接工作; 第一步必须是选择其他数据类型(varchar2
其值为Y
/N
或T
/F
; 或具有1
/0
的number
...选择所需的任何内容(,然后在单独的语句中切换到布尔值。例如:
SQL> declare
2 va_flag varchar2(1);
3 amount_zero boolean;
4 amount_zero_char varchar2(10);
5 begin
6 -- first select it into a VARCHAR2 variable ...
7 select decode(1, 1, 'T', 'F'),
8 'N'
9 into amount_zero_char,
10 va_flag
11 from env
12 where cuser = 'C'
13 and variable = 'FLAG_BALANCE';
14
15 -- ... then switch to Boolean
16 amount_zero := case when amount_zero_char = 'T' then true
17 else false
18 end;
19
20 -- display it
21 dbms_output.put_line(case when amount_zero then 'it is true'
22 else 'it is false'
23 end);
24 end;
25 /
it is true
PL/SQL procedure successfully completed.
SQL>
Oracle SQL不能直接使用布尔数据类型(PL/SQL可以,但不能SQL(。
您应该尝试将布尔文字替换为另一种数据类型,例如VARCHAR2(并调整相关代码(:
select
TRIM(SUBSTR(RPAD(VAL,30,'N'),1,1)),
DECODE(TRIM(SUBSTR(RPAD(VAL,30,'N'),2,2)),'S','TRUE','FALSE')
into va_flag, amount_zero
from ENV