oracle 逐层更新,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语句,将会导致全表更新

7f8d95aa2ed5f619d013cc2ed754a5b0.png

证实:

792d26a7291b0e5b9ef9833064b9b8bc.png

结果展示:

2f5c0109cd051dec11efc02a7b22a213.png

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

不在情况范围内的,执行的是将该字段值置空,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的情况都不匹配时,

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

8d81640f9ed9fffbc3892774856989c4.png

必须有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')

632bc72dbed9471704c71eb00153472b.png

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值