ORA-00904 解码预言机函数上的标识符无效



我写了一个简单的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/NT/F; 或具有1/0number...选择所需的任何内容(,然后在单独的语句中切换到布尔值。例如:

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

最新更新