【问题标题】:ORA-00904 invalid identifier while update table using CASE statementORA-00904 使用 CASE 语句更新表时标识符无效
【发布时间】: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 语句。

标签: oracle stored-procedures plsql ora-00904


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2021-08-08
    • 2022-01-22
    • 2011-08-27
    相关资源
    最近更新 更多