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

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

  • 写回答

4条回答 默认 最新

  • weixin_54409169 2021-04-05 17:42
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序