执行两次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;

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

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

G.PLATFORM、G.SITE 、G.ACT 、G.PLATFORM_ORD_SN 有字段为空值

你好,你最后怎么解决的