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 ...
随机推荐
- both, either, neither的用法
http://www.yywords.com/Article/200806/347.html 1. 这三个词都用来谈论两者:both 意为“(两者)都”,either意为“(两者中)任意一个”,ne ...
- [cocos2dx笔记003] Vs2013添加静态库project
(基于2.2.2版本号.用vs2013编辑代码)(cppblog版本号:http://www.cppblog.com/zdhsoft/archive/2014/05/11/206890.html) 在 ...
- dom4j怎么获得指定名称的节点信息
<?xml version="1.0" encoding="utf-8" ?> <MgUtil> <db_config> & ...
- 分割流 SequenceInputStream (转)
import java.io.*;import java.util.*; class SplitFile{ public static void main(String[] args) throws ...
- 《Java核心技术 卷II 高级特性(原书第9版)》
<Java核心技术 卷II 高级特性(原书第9版)> 基本信息 原书名:Core Java Volume II—Advanced Features(Ninth Edition) 作者: ( ...
- HDU1561:The more, The Better(树形DP+01背包)
Problem Description ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有 ...
- 机器学习实战:用nodejs实现人脸识别
机器学习实战:用nodejs实现人脸识别 在本文中,我将向你展示如何使用face-recognition.js执行可靠的人脸检测和识别 . 我曾经试图找一个能够精确识别人脸的Node.js库,但是 ...
- Oracle中表列由VARCHAR2类型改成CLOB
情景 原来表中的列定义成VARCHAR2类型,众所周知,VARCHAR2类型最大支持长度为4000.假设因为业务须要.想把此列转换为CLOB类型,在Oracle中直接通过ALTER语句转换是行不通的. ...
- 【软引用】弱引用 图片的加载与缓存 OOM
在java.lang.ref包中提供了几个类:SoftReference类.WeakReference类和PhantomReference类,它们分别代表软引用.弱引用和虚引用. ReferenceQ ...
- spring cloud-给Eureka Server加上安全的用户认证
前言 在前面的一篇文章中 spring cloud中启动Eureka Server 我们启动了Eureka Server,然后在浏览器中输入http://localhost:8761/后,直接回车,就 ...