Oracle 案例 WHERE 子句

Oracle Case WHERE Clause

我需要在我的 UPDATE 语句 WHERE 子句中有一个 CASE 语句。但是,它给我一个编译错误:

   UPDATE......
   .
   .
   WHERE CASE
           WHEN p_client_id = 0 THEN user_id = p_user_id
           ELSE client_id = p_client_id
         END;

680/50   PL/SQL: ORA-00905: missing keyword

我是不是遗漏了什么,或者这不是正确的语法?

我建议你re-write这样:

   UPDATE......
   .
   .
   WHERE (    p_client_id  = 0 and user_id   = p_user_id
           OR p_client_id != 0 and client_id = p_client_id )
         ;

我的假设(基于原始问题)是 p_client_id 总是被填充。如果不是这种情况,那么您将需要修改此代码以处理空值。

一种选择是使用DECODE()函数进行条件匹配,例如

WHERE DECODE(p_client_id,0,user_id,client_id)=DECODE(p_client_id,0,p_user_id,p_client_id)