当目标表中存在记录而源表中不存在时,我们希望设置 IS_DEL 位 = 1。
是否可以使用"不匹配时"子句使用 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
">当不匹配时"子句是否仅支持"然后插入"?
从文档中:
使用 MERGE 语句可以从一个或多个源中选择要更新或插入到表或视图中的行。您可以指定条件来确定是更新还是插入到目标表或视图中。
语法在源表(src
(中查找目标表(trg
(中具有或没有匹配行的行。如果有匹配的目标行,则更新该目标行;如果没有匹配的行,则会在目标表中插入一个新行。
它不会也不能在目标表中查找与源表中不匹配的行 - 这是您尝试标识和更新的内容。
WHEN MATCHED
和WHEN NOT MATCHED
的语法图也清楚地表明,你不能做WHEN NOT MATCHED THEN UPDATE
。
是的,您只能在不匹配时插入。查看预言机合并中的确切选项。
条件可以引用数据源或目标表。如果条件不为 true,则数据库在将行合并到表中时将跳过更新操作。