weixin_54409169
2021-04-05 17:40
采纳率: 0%
浏览 348

执行两次merge into,插入的数据会有重复的问题

在plsql中第一次执行merge into,插入的数据没问题,也没报错,

执行后再点一次执行,数据居然变多了,在源数据没变的情况下,请问我代码的问题吗?

下面是SQL:

MERGE INTO DM_DLY_ONLY_RECORD T USING (
  SELECT /*+parallel(8)*/bill_month,platform,wh,site,act,platform_ord_sn,dly_crncy,sum_dly_amt 
    FROM (    
    SELECT 
    to_char(f.dly_time,'yyyy-mm') bill_month,
    f.platform,
    f.wh,       
    f.site,      
    f.act,       
    f.platform_ord_sn,
    f.dly_crncy,       
    to_char(f.sum_dly_amt,'FM999,999,990.00') AS sum_dly_amt
    FROM  DM_DELIVERY f
    LEFT JOIN  DM_RECEIPT s
           ON f.platform = s.platform
          AND f.site = s.site
          AND f.act = s.act
          AND f.platform_ord_sn = s.platform_ord_sn
    WHERE s.receipt_crncy is null
      AND s.sum_receipt_amt is null
    )
  ) G  ON (T.PLATFORM = G.PLATFORM
       AND T.SITE = G.SITE 
       AND T.ACT = G.ACT 
       AND T.PLATFORM_ORD_SN = G.PLATFORM_ORD_SN)
       WHEN MATCHED THEN 
         UPDATE SET T.BILL_MONTH = G.BILL_MONTH
         ,T.WH = G.WH
         ,T.DLY_CRNCY = G.DLY_CRNCY
         ,T.SUM_DLY_AMT = G.SUM_DLY_AMT
         ,T.MODIFY_DATE = SYSDATE
       WHEN NOT MATCHED THEN
         INSERT (T.bill_month,T.platform,T.wh,T.site,T.act,T.platform_ord_sn,T.dly_crncy,T.sum_dly_amt)
         VALUES (G.bill_month,G.platform,G.wh,G.site,G.act,G.platform_ord_sn,G.dly_crncy,G.sum_dly_amt);
COMMIT;

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • weixin_54409169 2021-04-05 17:42

    按理说 WHEN MATCHED THEN 则更新数据,WHEN NOT MATCHED THEN 则插入数据,源数据没变的情况下,点第二次执行,数据应该没变才对,为什么数据条数会变多呢?

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题