• 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')

      

  • 相关阅读:
    rsync+crontab 企业实战 全量备份
    添加共享文件盘,切换用户访问共享
    一天电你千百回,这样做远离静电你造么~
    Network Password Recovery工具查看windows凭据密码
    su 和su
    运维面试 怎么实现程序自启
    在tomcat中配置域名的方法
    使用windows update blocker工具关闭windows系统自动更新
    CVM 母机透传,什么是透传模块?为什么要透传?
    硬盘接口类型
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9437603.html
Copyright © 2020-2023  润新知