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_in
和v_col2
是输入参数,txt
是我们将col3
的值匹配到user_in
值的另一个表。如果匹配,则将tbl
的col1
设置为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” 创建表时出错