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')
oracle 批量更新之update case when then的更多相关文章
- oracle批量更新之使用游标进行分批次更新的5种方式及速度比对
1.情景展示 一共有22w条数据, 需要将A表的主键更新至B表的指定字段,如何快速完成更新? 2.解决方案 声明: 解决方案不只一种,该文章只介绍快速游标法及代码实现: 两张表的ID和ID_CAR ...
- oracle 批量更新表字段
(一) 将数字替换成汉字 第一步,去重查询 使用distinct关键字先对该字段值进行去重查询,看共有几种情况 --查询指定区间内表停诊字段的值 SELECT DISTINCT T.CLOSE_T ...
- oracle 批量更新之将一个表的数据批量更新至另一个表
oracle 批量更新之将一个表的数据批量更新至另一个表 CreationTime--2018年7月3日17点38分 Author:Marydon Oracle 将一个表的指定字段的值更新至另一个 ...
- mybatis执行批量更新batch update 的方法
1.数据库连接必须配置:&allowMultiQueries=true 我的配置如下:jdbc:mysql://10.20.13.16:3306/CALENDAR?useUnicode=tru ...
- oracle批量更新
oracle批量更新 学习了:http://blog.csdn.net/zkcharge/article/details/50855755 statement.addBatch(); statemen ...
- Mybatis在oracle批量更新
最近公司业务中为了提高效率要做mybatis批量更新,但是到了oracle数据库中做了好几次都没成功,后来发现mybatis最后少了个分号,可能是Mybatis内部做了异常try catche 处 ...
- Oracle批量更新数据,使用begin end
/* 使用begin end批量更新 注意end后面必须使用;结束 并且每条update语句都要用;来结束 所以close为;END; 是为了补全语法 */ <foreach collectio ...
- Oracle批量、大量Update方法总结
一.业务场景: (1)主从两个表,主表Student,有字段id.name.sex,从表Boy,有字段id.name,主从表同一对象id相同 (2)从表Boy的name属性被业务修改,定时批量处理主表 ...
- oracle 同时更新(update)多个字段多个值
--创建表A,B: create table A (a1 varchar2(33),a2 varchar2(33),a3 varchar2(33)); create table B (b1 varch ...
随机推荐
- mysqld --debug=d:t:i:O:n --user=mysql (源码调试)
--debug=d:t--debug=d:f,main,subr1:F:L:t,20--debug=d,input,output,files:n--debug=d:t:i:O,\\mysqld.tra ...
- HUST 1017 Exact cover(DLX精确覆盖)
Description There is an N*M matrix with only 0s and 1s, (1 <= N,M <= 1000). An exact cover is ...
- 浅析OpenGL光照
浅析OpenGL光照 之前从来都没有涉及光照的内容,心想只要能通过常规的方法渲染出几何体甚至是模型就可以了,然而没有光照的日子注定是苦涩的,因为仅凭几何体和模型的颜色无法达到真是渲染的效果,在实际中有 ...
- MVC打印表格,把表格内容放到部分视图打印
假设在一个页面上有众多内容,而我们只想把该页面上的表格内容打印出来,window.print()方法会把整个页面的内容打印出来,如何做到只打印表格内容呢? 既然window.print()只会打印整页 ...
- 自用广告过滤规则,整合xwhyc大大的,非常小才79K
xwhyc大大 好久没更新了,自己弄了一点 更新: $third-party选项过滤多个站点的第三方广告:dy1000.com.yatu.tv,greasyfork.org 主流视频站点,请配合我的脚 ...
- VirtualBox 快捷键
VirtualBox 的 Host 键是哪一个? 默认的 Host = Right Ctrl 组合键,意思是键盘上两个 “Ctrl”中右边的那个.键盘上是没有 “Right”这个键的,刚开始不明白,后 ...
- DTree的改进与使用经验
1.dtree.js源码 function Node(id, pid, name, url, title, target, icon, iconOpen, open) { this.id = id; ...
- c++模板类成员的声明和定义
c++模板类成员的声明和定义应该都放在*.h中,有普通类不一样. 如果定义放在*.cpp中,最终链接时,会报方法undefined错误. 参考:http://users.cis.fiu.edu/~we ...
- mysql错误日志/var/log/mariadb/mariadb.log,二进制日志
mariadb-日志 IT_luo关注0人评论65人阅读2018-10-15 08:59:03 mariadb日志 mariadb日志: 1.查询日志:query log: 2.慢查询日志:slo ...
- scala 学习笔记十二 继承
1.介绍 继承是面向对象的概念,用于代码的可重用性.可以通过使用extends关键字来实现继承. 为了实现继承,一个类必须扩展到其他类,被扩展类称为超类或父类.扩展的类称为派生类或子类. Scala支 ...