在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;