使用CASE语句

时间:2018-05-22 11:13:20

标签: 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_inv_col2是输入参数,txt是我们将col3user_in值的值匹配的另一个表。如果匹配,则将col1的{​​{1}}设置为tbl,否则将其设置为ABC

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

  

ORA-00904无效标识符

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

1 个答案:

答案 0 :(得分: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;