ORA-00904 使用 CASE 语句更新表时标识符无效

Posted

技术标签:

【中文标题】ORA-00904 使用 CASE 语句更新表时标识符无效【英文标题】:ORA-00904 invalid identifier while update table using CASE statement 【发布时间】:2018-05-22 11:13:19 【问题描述】:

我创建了一个存储过程,在其中我使用CASE 语句更新了一个表。 user_in 是存储过程的输入参数。

这是UPDATE 声明:

update tbl
set col1 = CASE WHEN (user_in = txt.col3) THEN 'ABC'
                ELSE 'XYZ'
           END
where col2 = v_col2;

其中user_inv_col2 是输入参数,txt 是我们将col3 的值匹配到user_in 值的另一个表。如果匹配,则将tblcol1 设置为ABC,否则设置为XYZ

执行存储过程时出现错误:

ORA-00904 无效标识符

如何解决此问题,以便我可以轻松更新表并且存储过程将成功编译。谢谢

【问题讨论】:

我认为您需要在更新语句中将 table txt 与 tbl 连接起来。尝试在 Oracle 中搜索 Merge 语句。 【参考方案1】:

你可以这样创建它:

create or replace procedure pr_upd_tbl( v_col2 int, user_in int ) is
begin
update tbl t
   set col1 = CASE
                WHEN (user_in = ( select col3 from txt x where x.id = t.id ) ) THEN
                 'ABC'
                ELSE
                 'XYZ'
              END
 where col2 = v_col2;
end;

【讨论】:

以上是关于ORA-00904 使用 CASE 语句更新表时标识符无效的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot “oracle.jdbc.OracleDatabaseException: ORA-00904: invalid identifier” 创建表时出错

ORA-00904: 插入表时标识符无效

为啥即使存在列,我也会有 ORA-00904?

SQL 错误:ORA-00904: : 第 4 行中的标识符无效

在数据透视期间指定列时标识符无效 - ORA-00904

ORA-00904 在对象表上授予选择后出错