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

本文介绍在Oracle数据库中如何批量更新记录的一个或多个字段。通过CASE语句和DECODE函数实现灵活的数据更新,适用于多种场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近使用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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值