微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于更新表但多列的 DB2 case 语句

如何解决用于更新表但多列的 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 举报,一经查实,本站将立刻删除。