码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-06-13 21:27:03      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

最近使用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

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

标签:

原文地址:http://www.cnblogs.com/cyzeng/p/4574042.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!