最近使用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)
Oracle批量更新技巧
本文介绍在Oracle数据库中如何批量更新记录的一个或多个字段。通过CASE语句和DECODE函数实现灵活的数据更新,适用于多种场景。
222

被折叠的 条评论
为什么被折叠?



