提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
业务需求
某表的表结构不动的情况下,接入少量数据并当遇相同字段值时更新本组信息,否则插入。
提示:以下是本篇文章正文内容,下面案例可供参考
一、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()判断的联合条件要唯一。