在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 有字段为空值
你好,你最后怎么解决的