oracle使用case或decode语句实现批量更新

最近使用oracle数据库做开发,一开始只需要批量更新多条记录中的某一个字段,后来需求变更需要对多个字段进行更新,故查看资料得到如下内容,分享给大家。我在oracle 10g环境下,都能跑通。

批量更新一个字段:

1 UPDATE categories
2     SET display_order = CASE id
3         WHEN ‘1‘ THEN 3
4         WHEN ‘2‘ THEN 4
5         WHEN ‘3‘ THEN 5
6     END
7 WHERE id IN (‘1‘,‘2‘,‘3‘);

或者更普遍的方式:

UPDATE test
    SET first_name = CASE
        WHEN card_no = 100 THEN ‘aaa‘
        WHEN card_no = 110 THEN ‘bbb‘
        ELSE first_name    END

如果要批量更新多条记录的多个字段,则

UPDATE categories
    SET display_order = CASE id
        WHEN ‘1‘ THEN 3
        WHEN ‘2‘ THEN 4
        WHEN ‘3‘ THEN 5
    END,
    title = CASE id
        WHEN ‘1‘ THEN ‘New Title 1‘
        WHEN ‘2‘ THEN ‘New Title 2‘
        WHEN ‘3‘ THEN ‘New Title 3‘
    END
WHERE id IN (‘1‘,‘2‘,‘3‘)

UPDATE test
    SET first_name = CASE
        WHEN card_no = 100 THEN ‘aaa‘
        WHEN card_no = 110 THEN ‘bbb‘
        ELSE first_name
    END,
    last_name = CASE
        WHEN card_no = 100 THEN ‘xxx‘
        WHEN card_no = 110 THEN ‘yyy‘
        ELSE last_name
    END    

每个部分都罗列了两种方法,第二种方法更普遍,case后面直接是when,when里面可以包含更复杂的添加,比如大于小于等;但是第一种方法虽然case后直接指明了条件字段id,但因为有where的限制,执行起来更块一些把,其实针对第二种方法也可以加where以限制的。

另外,还看到一种使用decode的批量更新方法,不过好像decode的效率要低一些。

UPDATE test
SET first_name = DECODE(card_no,100,‘aaa‘,110,‘bbb‘)
   ,last_name = DECODE(card_no,100,‘xxx‘,110,‘yyy‘)
WHERE card_no IN (100,101)

参考地址:

http://www.jb51.net/article/41852.htm

https://community.oracle.com/thread/682763

时间: 2024-11-09 20:06:15

oracle使用case或decode语句实现批量更新的相关文章

mysql语句:批量更新多条记录的不同值[转]

mysql语句:批量更新多条记录的不同值[转] mysql语句:批量更新多条记录的不同值 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 1 UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: 1 UPDATE mytable SET myfield = 'value' WHERE other_field in ('o

mysql语句:批量更新多条记录的不同

mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: UPDATE mytable SET myfield = 'value' WHERE other_field in ('other_values'); 这里注意 ‘other_values’ 是一个逗号(,)分隔的字符串

python中使用excutemany执行update语句,批量更新

python中使用excutemany执行update语句,批量更新 # coding:utf8 import pymysql import logging connection = pymysql.connect(host=HOST, port=3306, user=USER, password=PASSWORD, db=DATABASE,charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor) cursor = connection.

oracle和mysql中update联表批量更新数据的区别

之前碰到一个sql语句,在oracle中可以运行,在mysql上就不行,后来查了好久,发现了他们两个联表批量更新数据的区别如下: (借鉴一下别人的例子) update :单表的更新不用说了,两者一样,主要说说多表的更新复制代码 代码如下: Oracle> Oracle的多表更新要求比较严格,所以有的时候不是很好写,我们可以试试Oracle的游标 update ( select t.charger_id_ new_charger_id_ from t_cus_year_status t left

mysql 批量更新与批量更新多条记录的不同值实现方法

在mysql中批量更新我们可能使用update,replace into来操作,下面来给各位详细介绍mysql 批量更新与性能吧! mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 复制代码代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: 复制代码代码如下: UPDATE mytable SET myfie

[PDO绑定参数]使用PHP的PDO扩展进行批量更新操作

最近有一个批量更新数据库表中某几个字段的需求,在做这个需求的时候,使用了PDO做参数绑定,其中遇到了一个坑. 方案选择 笔者已知的做批量更新有以下几种方案: 1.逐条更新 这种是最简单的方案,但无疑也是效率最低的方案. 2.CASE WHEN 类似如下的语句 UPDATE tbl_test SET val = CASE id WHEN 1 THEN 2 WHEN 2 THEN 3 END WHERE id IN(1, 2); PDO绑定参数 为了防止SQL注入,使用了PDO扩展绑定参数.上面的数

mysql 批量更新

bs_user 表,我们叫他 bu表, 字段user_id,len_id, think_wellUser 表,我们简称为tw表,中的user_id ,len_id 其中tw表的user_id 是bu表user_id的子集.bu表的len_id有乱码,tw表len_id没有乱码, 需求是将bu乱码的len_id,更新 采用如下sql语句, update bs_user,think_wellUserset bs_user.len_id=think_wellUser.len_idwhere bs_us

批量更新数据不成功

问题: Excel导入用户数据,已有的用户信息更新不成功. 场景:导入用户数据时,数据库已存在的数据进行更新,不存在的新增,excel表中可存在相同手机号的用户信息,以最后一条为准更新用户信息. 分析:业务逻辑没有问题: 1先查询数据库,存在则更新用户信息,将新的用户信息存放到updateUserList列表 2不存在,再查询本地用户信息缓存(缓存excel中已有的用户信息), 2.1缓存中存在,更新用户信息,将修改的用户信息存放到updateUserList列表 2.2缓存中不存在,新增用户信

mysql进阶 十四 批量更新与批量更新多条记录的不同值实现方法

mysql 批量更新与批量更新多条记录的不同值实现方法 在mysql中批量更新我们可能使用update,replace into来操作,下面详细介绍mysql批量更新与性能. 批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: UPDATE mytable SE