Merge Into 是判断某条记录是否存在,如果存在就更新,如果不存在就插入。
Merge into Table a
using (select c from Table where c = 'xxx') b
on(a.c = b.c)
when matched then
update set a.d = 'XXX'
when not matched then
insert(c,d) values ('xxx','xxx')
以上是Merge into的语法,但是在实际应用中你会碰见该条SQL语句执行成功了,但是就是没有插入(当该条数据在数据库中不存在时)。经过分析你可能犯了一下错误:
1. 如果Using中的语句中你没有查询到数据,是不会执行insert方法的。
所以需要修改Using中的SQL ==> select ‘xxx’ as c from dual;此时SQL修改好了,再执行才会执行insert语句。
2. 执行merge into 语句后,你没有执行commit,导致了无法insert。
所以最终的Merge into 的SQL是:
Merge into Table a
using (select ‘xxx’ as c,'xxx' as e from dual) b
on(a.c = b.c and a.e = b.e)
when matched then
update set a.d = 'XXX'
when not matched then
insert(c,d,e) values ('xxx','xxx','xxx');
commit;