0
我的意圖是避免試圖將相同的記錄插入到數據庫中。 此聲明不插入記錄。 select中引用的記錄尚不存在,因此應該插入。任何想法,我錯了。Oracle,合併陳述不起作用
MERGE INTO XX0101.CAMPAIGN b
USING (SELECT * FROM XX0101.CAMPAIGN WHERE CAMPAIGN_ID=7 AND X_ID='0123' AND Y_ID='4567') a
ON (a.CAMPAIGN_ID = b.CAMPAIGN_ID)
WHEN NOT MATCHED THEN
INSERT (CAMPAIGN_ID, X_ID, Y_ID, ROW_LAST_UPDATE_TS, ROW_LAST_UPDATE_ID)
VALUES (7, '0123', '4567', SYSDATE, 'ABC');
呃..你是從表中查詢一條記錄,然後讓Oracle在同一個表中找到它(當然這找到了它)..所以既然匹配了,它就不會INSERT ..你爲什麼會認爲它會插入它? – Ditto
我對MERGE的理解是select首先在表上執行,如果記錄不存在,那麼它將繼續插入。但是,我可能會誤會,因爲我剛剛遇到該功能,可能誤解了該功能。 – jimmy
你是「排序」正確的。第一個Oracle檢索'USING'子句中的所有行。然後它將結果集「a」加入到您的初始表「b」中...使用「ON」子句進行連接。如果匹配或不匹配,你正在檢查。因爲你在「a」中設置的結果是空的(因爲'CAMPAIGN_ID = 7'不存在),所以MERGE沒有任何東西;;)我假設你有一個主鍵或唯一約束?如果是這樣,爲什麼不只是'INSERT'讓Oracle通過'DUP_VAL_ON_INDEX'告訴你它存在? – Ditto