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')
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/9437603.html