Oracle MERGE NOT MATCHED THEN UPDATE 可能吗?

Mat*_*alk 2 sql oracle

当源表中不存在的目标表中存在记录时,我们希望将 IS_DEL 位设置为 1。

是否可以使用 WHEN NOT MATCHED 子句使用 MERGE 语句,但使其执行更新?

尝试这样做时,我收到“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
Run Code Online (Sandbox Code Playgroud)

“WHEN NOT MATCH”子句是否只支持“THEN INSERT”?

Ale*_*ole 5

从文档

使用 MERGE 语句从一个或多个源中选择行以更新或插入到表或视图中。您可以指定条件来确定是更新还是插入到目标表或视图中。

该语法在源表 ( src) 中查找在目标表 ( ) 中有或没有匹配行的行trg。如果有匹配的目标行,则更新它;如果没有匹配的行,那么它会在目标表中插入一个新行。

它不会也不能在目标表中查找与源表中不匹配的行 - 这就是您要识别和更新的行。

对于语法图WHEN MATCHEDWHEN NOT MATCHED也说清楚,你不能这样做WHEN NOT MATCHED THEN UPDATE