首页 > 解决方案 > ORA-00904 解码 oracle 函数的标识符无效

问题描述

我编写了一个简单的 pl\sql 过程来读取 db 上的值。对于相同的值,我使用两个不同的函数最终获得不同的值。

我的代码

  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” Invalid Identifier”。amount_zero 是一个布尔值。

标签: oracleplsql

解决方案


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

推荐阅读