首页 > 解决方案 > 是否可以在 SET 中使用 IF 语句?

问题描述

我在 Oracle 中有一个表,其中一个名为ERROR_CODE(即 a VARCHAR2)的列最初设置NULL为每个值。我想用UPDATE如下语句中的语句更新它:

UPDATE SNAPSHOT_TEST
SET ERROR_CODE = 
  IF(...) THEN NVL2(ERROR_CODE, CONCAT(ERROR_CODE, ',8'), '9')
    ELIF(...) THEN NVL2(ERROR_CODE, CONCAT(ERROR_CODE, ',9'), '9') 
    ELIF(...) ...
  END IF;

我尝试使用一个CASE语句来实现这个结果,它可以工作,但这不是我需要的,因为多个条件可以同时匹配,如果发生这种情况,我需要连接错误代码,就像我之前插入的语句中一样,有'例如,最后是 8,9'。有没有办法在 Oracle 中实现这一点?

标签: sqloracle

解决方案


你可以使用CASE表达式:

UPDATE SNAPSHOT_TEST
SET ERROR_CODE = 
    CASE  WHEN ... THEN NVL2(ERROR_CODE, CONCAT(ERROR_CODE, ',8'), '9')
          WHEN ... THEN NVL2(ERROR_CODE, CONCAT(ERROR_CODE, ',9'), '9') 
          ELSE ...
    END;

最后有'8,9'

UPDATE SNAPSHOT_TEST
SET ERROR_CODE =
  ERROR_CODE || CASE WHEN ... THEN '8' END || CASE WHEN ... THEN '9' END

推荐阅读