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

Oracle ORA-00904使用CASE语句更新表时标识符无效,oracle,stored-procedures,plsql,ora-00904,Oracle,Stored Procedures,Plsql,Ora 00904,我创建了一个存储过程,在其中使用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值匹配。如果它们匹配,则将tb

我创建了一个存储过程,在其中使用
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无效标识符


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

您可以这样创建它:

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;

我认为您需要在update语句中将表txt与tbl连接起来。尝试在Oracle中搜索合并语句。