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

  

posted @ 2018-08-07 16:04  Marydon  阅读(11828)  评论(0编辑  收藏  举报