sql - 是否可以在 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 中实现这一点?
解决方案
你可以使用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
推荐阅读
- android - 如何在 Videoview Android 中播放实时 RTSP 视频?
- azure-functions - for await 在异步函数内部失败
- c# - WPF - 从 ListView.SelectedItem 获取绑定的源对象
- xcode - 应用在 TestFlight 上运行,但在 Appstore 上崩溃,我如何在发布前在 Appstore 上模拟确切的版本?
- java - Java CompletableFuture 得到它的请求
- java - 随机生成4张扑克牌:教科书用更长的代码?
- c# - 过滤器需要通过引用传递才能附加到它
- mysql - 循环子查询结果查询同一张表
- java - Project Reactor 将一个发布者分成两个,至少有两个订阅者
- java - 在 Byte Buddy 中禁用标识符验证