2017-08-10 18 views
0

當源表中不存在的目標表中存在記錄時,我們希望設置IS_DEL位= 1。Oracle MERGE不匹配,然後更新可能嗎?

是否可以使用WHEN NOT MATCHED子句使用MERGE語句,但是使其執行UPDATE?

當試圖這樣做時,我得到一個「ORA-00905:缺少關鍵字」消息。

MERGE 
INTO AMEPSA.ENTERPRISE_LOCATION trg 
USING (
     SELECT C.LOCATION_KEY as LOCATION_KEY 
     FROM AMEPSA.ENTERPRISE_LOCATION C 
      INNER JOIN AMESTAGE.VW_LOCATION L ON C.REC_SRC_KEY_CD = L.LOCATION_ID  
     WHERE C.CURR_REC_IND = 'Y' 
     ) src 
ON  (trg.LOCATION_KEY = src.LOCATION_KEY) 
WHEN NOT MATCHED THEN UPDATE 
    SET trg.IS_DEL = 1 

「WHEN NOT MATCH」子句只支持「THEN INSERT」嗎?

+1

看看:https://stackoverflow.com/questions/10539627/when-doing-a-merge-in-oracle-sql-how-can-i-update-rows-that-arent-matched-in- t –

+1

'WHEN MATCHED THEN UPDATE'更新匹配的行。當沒有匹配時,你會期望哪個行會影響'UPDATE'? –

+0

如果沒有匹配,你會更新什麼? – Sal

回答

1

From the documentation

使用MERGE語句從一個或多個源的更新或插入到表或視圖中選擇行。您可以指定條件來確定是更新還是插入目標表或視圖。

該語法在源表(src)中查找在目標表(trg)中有或沒有匹配行的行。如果有匹配的目標行,則更新它;如果沒有匹配的行,那麼它會在目標表中插入一個新行。

它沒有也不能在目標表中查找源表中未匹配的行 - 這是您嘗試識別和更新的行。

WHEN MATCHEDWHEN NOT MATCHED的語法圖也清楚表明您不能執行WHEN NOT MATCHED THEN UPDATE