oracle 批量添加数据当遇到条件字段相同时则更新本组信息

MERGEINTO是Oracle数据库中的一个DML语句,用于合并数据,它结合了INSERT、UPDATE和DELETE的功能。在保持表结构不变的情况下,根据与源数据的连接结果,对目标表进行插入或更新操作。使用时,先定义using()的数据源,然后设置on()条件,当匹配时执行更新,不匹配时执行插入。on()条件需确保唯一性。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


业务需求

某表的表结构不动的情况下,接入少量数据并当遇相同字段值时更新本组信息,否则插入。


提示:以下是本篇文章正文内容,下面案例可供参考

一、merge into是什么?

MERGE关键字是一个神奇的DML关键字,它是Oracle9i新增的语法,它能将INSERT,UPDATE,DELETE等操作并为一句,根据与源表(可为实际表,也可为多组对象数据)联接的结果,对目标表执行插入、更新或删除操作。

二、使用步骤

代码如下(示例2.1):

merge into demo u using(
            <foreach collection="list" item="item" index="index"
                        separator="union">
            select #{item.id} as id,#{item.username} as username,#{item.age} as age from dual
            </foreach>
        )t
        on (u.id=t.id and u.age=t.age)
        when matched then
        update set u.username=t.username
        when not matched then
        insert (u.id,u.username,u.age) values (t.id,t.username,t.age)

代码解释

解释如下:dual : 是oracle的虚拟表

using( 
<foreach collection="list" item="item" index="index"
                        separator="union">
            select #{item.id} as id,#{item.username} as username,#{item.age} as age from dual
            </foreach>
        )t    

using()    --使用的数据源
demo       --表名称;
u          --表别名;
on (u.id=t.id and u.age=t.age) -- 判断条件 数据源t的某一行与数据库表u是否满足

when matched then             
update set u.username=t.username  -- 满足条件则执行修改此数据、注意“ on内如果有条件了则修改时不    
									 能修改条件字段”
when not matched then
        insert (u.id,u.username,u.age) values (t.id,t.username,t.age)	
        						  -- 不满足则执行此插入语句

注意:  update 与 insert 后不能 加表名							 

总结

简单的说就是,判断表中有没有符合on ( ) 条件中的数据,有了就更新,没有就插入。其中on()判断的联合条件要唯一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@小白—

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值