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的更多相关文章

  1. oracle批量更新之使用游标进行分批次更新的5种方式及速度比对

      1.情景展示 一共有22w条数据, 需要将A表的主键更新至B表的指定字段,如何快速完成更新? 2.解决方案 声明: 解决方案不只一种,该文章只介绍快速游标法及代码实现: 两张表的ID和ID_CAR ...

  2. oracle 批量更新表字段

      (一) 将数字替换成汉字 第一步,去重查询 使用distinct关键字先对该字段值进行去重查询,看共有几种情况 --查询指定区间内表停诊字段的值 SELECT DISTINCT T.CLOSE_T ...

  3. oracle 批量更新之将一个表的数据批量更新至另一个表

      oracle 批量更新之将一个表的数据批量更新至另一个表 CreationTime--2018年7月3日17点38分 Author:Marydon Oracle 将一个表的指定字段的值更新至另一个 ...

  4. mybatis执行批量更新batch update 的方法

    1.数据库连接必须配置:&allowMultiQueries=true 我的配置如下:jdbc:mysql://10.20.13.16:3306/CALENDAR?useUnicode=tru ...

  5. oracle批量更新

    oracle批量更新 学习了:http://blog.csdn.net/zkcharge/article/details/50855755 statement.addBatch(); statemen ...

  6. Mybatis在oracle批量更新

    最近公司业务中为了提高效率要做mybatis批量更新,但是到了oracle数据库中做了好几次都没成功,后来发现mybatis最后少了个分号,可能是Mybatis内部做了异常try  catche  处 ...

  7. Oracle批量更新数据,使用begin end

    /* 使用begin end批量更新 注意end后面必须使用;结束 并且每条update语句都要用;来结束 所以close为;END; 是为了补全语法 */ <foreach collectio ...

  8. Oracle批量、大量Update方法总结

    一.业务场景: (1)主从两个表,主表Student,有字段id.name.sex,从表Boy,有字段id.name,主从表同一对象id相同 (2)从表Boy的name属性被业务修改,定时批量处理主表 ...

  9. oracle 同时更新(update)多个字段多个值

    --创建表A,B: create table A (a1 varchar2(33),a2 varchar2(33),a3 varchar2(33)); create table B (b1 varch ...

随机推荐

  1. easyui中combobox 验证输入的值必须为选项框中的数据

    当作为提示框的方式时,combobox必须设置为允许用户输入的模式,但是当用户输入后未选择正确的数据就直接按tab或点击鼠标离开控件会导致用户输入无效的值并且通过验证,为了避免这种情况的发生我们需要对 ...

  2. 【docker】关于docker 中 镜像、容器的关系理解

    例如,使用docker 拉取下来一个要用的镜像es docker pull elasticsearch:5.6.9 此时es的镜像存在与服务器上 docker images 对于你运行镜像为一个容器的 ...

  3. Java Web开发基础(2)-JSP

    上一篇博我粗略的介绍了一下Servlet.粗略是由于博主也刚刚学习这部分的内容,还不是非常懂所以无法讲的非常精细.可是本着二八原则,我还是先继续学习.所以,这篇博客接着JSP的内容.由于.这两个内容关 ...

  4. QT vs x64编译

    下载qt-everywhere-opensource-src-5.3.0 这个设置非常重要,不对的话,一大堆编译错误,已经折腾了好多回了 configure -mp -confirm-license ...

  5. 列出Windows域中所有的机器

    我所在的部门大概管理了300+台Windows终端,最近开始采用域的方式来进行管理.(别笑我们土,原来手工修改Windows口令太痛苦了.) 现在的任务是想在域控服务器中列出纳入域管理的所有机器,以及 ...

  6. strcat实现

    //将源字符串加const,表明其为输入参数 char*strcat(char*strDest,constchar*strSrc) { //后文returnaddress,故不能放在assert断言之 ...

  7. Go 语言简介(上)— 语法

    周末天气不好,只能宅在家里,于是就顺便看了一下Go语言,觉得比较有意思,所以写篇文章介绍一下.我想写一篇你可以在乘坐地铁或公交车上下班时就可以初步了解一门语言的文章.所以,下面的文章主要是以代码和注释 ...

  8. vim/vi 命令详解

    在工作中,要对服务器上的文件进行的修改,可以使用ssh远程登录到服务器上,并且使用vi进行快速的编辑即可,在没有图形界面的环境下,要编辑文件,vi是最佳选择! vi命令是Linux中最经典的文本编辑器 ...

  9. 我的SQL里哪个语句占用的CPU最多?

    可以使用下面的语句来得到 SELECT SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1, ( (CASE qs.statement_end_off ...

  10. JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法

    黑马程序员 我们知道,在设计一个Javabean的时候,要把这些BEAN 的数据存放在数据库中的表结构,然而这些数据库中的表直接又有些特殊的关系,例如员工与部门直接有一对多的关系,学生与老师直接又多对 ...