sql - Oracle MERGE NOT MATCHED THEN UPDATE 可能吗?

标签 sql oracle

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

是否可以使用带有 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”?

最佳答案

From the documentation :

Use the MERGE statement to select rows from one or more sources for update or insertion into a table or view. You can specify conditions to determine whether to update or insert into the target table or view.

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

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

WHEN MATCHED 的语法图和 WHEN NOT MATCHED还要明确表示您不能执行 WHEN NOT MATCHED THEN UPDATE

关于sql - Oracle MERGE NOT MATCHED THEN UPDATE 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45619857/

相关文章:

xml - 在 xml 中使用命名空间时如何通过 xmltable 解析 xml(Oracle)

sql - 交叉应用不适用于 SQL SERVER 2000?

SQL 到 Oracle 链接服务器 Openquery 检索单行

oracle -/docker-entrypoint-initdb.d目录内的SQL脚本不被执行

sql - 我可以使用别名作为过滤器吗? T-SQL 2012

oracle - 在Oracle 10g中使用左联接删除

oracle - 将表类型对象与 Oracle 中的常规表连接起来

c# - 如何检查对象是否是sql to linq类型

java - 如何在 spring 中仅使用自动生成的值向数据库插入一行,并返回一个 ID?

mysql - 在 SQL 命令中使用浮点型值