如何解决用于更新表但多列的 DB2 case 语句
我正在尝试将 4 个单独的更新语句合并为一个更新语句。 我没有案例陈述的经验,或者我尝试做的事情是否可行。
关于如何构建这个的任何意见? 这是我的尝试,但不起作用。
UPDATE URL
SET CONTENT_TITLE =
CASE
WHEN ID = ? AND SYstem_UPDATE_REASON = ? AND CONTENT_TITLE IS NOT NULL AND ? NOT BETWEEN 400 AND 599 OR ID = ? AND SYstem_UPDATE_REASON = ? AND CONTENT_TITLE != '' AND ? NOT BETWEEN 400 AND 599 THEN ?
WHEN ID = ? AND CONTENT_TITLE IS NULL AND ? NOT BETWEEN 400 AND 599 OR ID = ? AND CONTENT_TITLE = '' AND ? NOT BETWEEN 400 AND 599 THEN ?
WHEN ID = ? AND CONTENT_TITLE IS NOT NULL AND ? BETWEEN 400 AND 599 THEN ?
WHEN ID = ? AND CONTENT_TITLE IS NULL AND ? BETWEEN 400 AND 599 OR ID = ? AND CONTENT_TITLE = '' AND ? BETWEEN 400 AND 599 THEN ?
SET CONTENT_DSCR =
CASE
WHEN ID = ? AND CONTENT_DSCR IS NULL AND ? NOT BETWEEN 400 AND 599 OR ID = ? AND CONTENT_DSCR = '' AND ? NOT BETWEEN 400 AND 599 THEN ?
WHEN ID = ? AND CONTENT_TITLE IS NOT NULL AND ? BETWEEN 400 AND 599 THEN ?
SET SYstem_UPDATE_REASON = 'title and dscr update'
SET UPDATED_ON = SYSDATE
END
这是我使用的占位符 (?):
u.urlId,'title and dscr update',u.statusCode,u.urlId,u.contentTitle,null,u.contentDescription,'title and dscr update'
解决方法
也许它根本没有帮助,但是 - 让我试试(因为 小时 没有回复):
我不知道 DB2;如果它的 SQL 与 Oracle 的 SQL 类似,则
-
CASE
应该有它的END
- 整个
SET
语句中只有一个UPDATE
关键字 - 逻辑上,当有
OR
时,你应该使用括号(否则你会得到意外结果)
像这样:
UPDATE URL
SET CONTENT_TITLE =
CASE
WHEN (ID = ? AND SYSTEM_UPDATE_REASON = ? AND CONTENT_TITLE IS NOT NULL AND ? NOT BETWEEN 400 AND 599)
OR (ID = ? AND SYSTEM_UPDATE_REASON = ? AND CONTENT_TITLE != '' AND ? NOT BETWEEN 400 AND 599) THEN ?
WHEN (ID = ? AND CONTENT_TITLE IS NULL AND ? NOT BETWEEN 400 AND 599)
OR (ID = ? AND CONTENT_TITLE = '' AND ? NOT BETWEEN 400 AND 599) THEN ?
WHEN ID = ? AND CONTENT_TITLE IS NOT NULL AND ? BETWEEN 400 AND 599 THEN ?
WHEN (ID = ? AND CONTENT_TITLE IS NULL AND ? BETWEEN 400 AND 599)
OR (ID = ? AND CONTENT_TITLE = '' AND ? BETWEEN 400 AND 599) THEN ?
END,CONTENT_DSCR =
CASE
WHEN (ID = ? AND CONTENT_DSCR IS NULL AND ? NOT BETWEEN 400 AND 599)
OR (ID = ? AND CONTENT_DSCR = '' AND ? NOT BETWEEN 400 AND 599) THEN ?
WHEN ID = ? AND CONTENT_TITLE IS NOT NULL AND ? BETWEEN 400 AND 599 THEN ?
END,SYSTEM_UPDATE_REASON = 'title and dscr update',UPDATED_ON = SYSDATE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。