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

      

  • 相关阅读:
    一种无法被Dump的jar包加密保护解决方案
    基于设备指纹零感验证系统
    IOS防作弊产品技术原理分析
    某移动端防作弊产品技术原理浅析与个人方案构想
    web安全防御之RASP技术
    Linux漏洞分析入门笔记-Off-By-One(栈)
    smb中继学习
    Dedecms sp2 5.7 后台getshell审计
    phpmyadmin后台代码执行分析复现
    静态恶意代码逃逸-学习一
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9437603.html
Copyright © 2011-2022 走看看