oracle 中 MERGE INTO 使用时注意唯一约束冲突

MERGE INTO 使用时注意唯一冲突
1 用处:当需要对大量数据做“有则更新,无则插入”时,可以用到
(具体使用可参考链接http://space.itpub.net/25313300/viewspace-700222)
2 语法结构:
    MERGE INTO TAB_target t
    USING (SELECT
        s.*
        from TAB_source s) s
    ON (t.APPL_NO = s.APPL_NO)
  WHEN MATCHED THEN UPDATE
           SET t.CITY = s.CITY
    WHEN NOT MATCHED THEN
        INSERT
            (t.APPL_NO,t.CITY)
        VALUES
            (s.APPL_NO,s.CITY)
    ;

3 注意:
梳理一下这里的merge into的执行逻辑,(1)在merge into 之前将目标表tab_target的状态会记录下来,作为被匹配的对象,如有哪些 APPL_NO,

(2) using查询出来的结果集就会作为匹配的数据去根据条件appl_no与目标表比对,如果对上,即有记录,就更新,如果没有,就插入。

(3) 要注意,由于这里匹配的是merge into之前的状态,如果appl_no在target表中有唯一约束,而tab_source表查询出来的结果集中有重复的appl_no,那么结果集中居于后面的appl_no就会在比对的时候被当作没对上处理,插入进去后又会报唯一键冲突错误。所以,请保证数据集的唯一性。

4 链接:另外如果要在merge into中的update或select语句中添加where条件也是可以的,可以查看(http://blog.csdn.net/u011348602/article/details/9277983)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值