zoukankan      html  css  js  c++  java
  • oracle 批量更新之update case when then

    oracle 批量更新之update case when then

    CreationTime--2018年8月7日15点51分

    Author:Marydon

    1.情景描述

      根据表中同一字段不同情况下的值修改为对应的内容,如何实现?

      使用case when then else end语句。

    2.错误用法

      没有else语句,将会导致全表更新

      证实:

      

      结果展示:

      说明:更新的是全表记录,而不是更新的只是符合上面三种情况的记录;

      不在情况范围内的,执行的是将该字段值置空,sql语句相当于:

    UPDATE BASE_AC_MODULE_BAK T
       SET T.MODULEICON = CASE
                            WHEN T.MODULEICON = '/commons/images/img/add.gif' THEN
                             '/commons/images/img/add.png'
                            WHEN T.MODULEICON = '/commons/images/img/edit.gif' THEN
                             '/commons/images/img/update.png'
                            WHEN T.MODULEICON = '/commons/images/img/delete.gif' THEN
                             '/commons/images/img/delete.png'
                            ELSE
                             NULL
                          END  

    3.case when then else end语法

      用法一:简单case语句

    CASE SEX  
    WHEN '1' THEN '男'  
    WHEN '2' THEN '女'  
    ELSE '其他' END  

      用法二:case搜索语句

    CASE WHEN SEX = '1' THEN '男'
    WHEN SEX = '2' THEN '女' 
    ELSE '其他' END

      用法说明:

      与java的switch语句不同是,如果不声明ELSE语句,oracle会自动添加ELSE语句(ELSE NULL),当数据出现与case的情况都不匹配时,

      显示的不是原数据,而是空值;

      必须有END关键词声明结束CASE语句;

      另外,需特别注意的是:使用CASE语句,无论是查询还是修改语句,在不加限制条件的情况下,默认是对全表进行操作!

    4.正确用法

      方法一

    UPDATE BASE_AC_MODULE_bak T
       SET T.MODULEICON = CASE
                            WHEN T.MODULEICON = '/commons/images/img/add.gif' THEN
                             '/commons/images/img/add.png'
                            WHEN T.MODULEICON = '/commons/images/img/edit.gif' THEN
                             '/commons/images/img/update.png'
                            WHEN T.MODULEICON = '/commons/images/img/delete.gif' THEN
                             '/commons/images/img/delete.png'
                            ELSE
                             T.MODULEICON
                          END
     WHERE (T.MODULEICON = '/commons/images/img/add.gif' OR
           T.MODULEICON = '/commons/images/img/delete.gif' OR
           T.MODULEICON = '/commons/images/img/edit.gif')
    

      else为什么可以省略?

      更新加上限制条件后,只有16条数据符合要求并进行修改,不存在else的情况。

      方法二:限制条件加在where后,多个条件之间使用or

    UPDATE BASE_AC_MODULE_BAK T
       SET T.MODULEICON = DECODE(T.MODULEICON,
                                 '/commons/images/img/add.gif',
                                 '/commons/images/img/add.png',
                                 '/commons/images/img/edit.gif',
                                 '/commons/images/img/update.png',
                                 '/commons/images/img/delete.gif',
                                 '/commons/images/img/delete.png')
     WHERE (T.MODULEICON = '/commons/images/img/add.gif' OR
           T.MODULEICON = '/commons/images/img/delete.gif' OR
           T.MODULEICON = '/commons/images/img/edit.gif')

      

  • 相关阅读:
    iOS 即时通讯 + 仿微信聊天框架 + 源码
    Accelerate Framework in Swift
    最新 iOS 框架整体梳理(三)
    最新 iOS 框架整体梳理(二)
    单元测试
    iOS
    画个Shape留意到的东西
    deleteSections & deleteRows 我踩的坑
    常用开发技巧系列(六)
    程序员该如何提高睡眠质量?—程序媛233酱的助攻~
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9437603.html
Copyright © 2011-2022 走看看