【问题标题】:Merge: modifying multiple tables合并:修改多个表
【发布时间】:2012-05-15 09:00:13
【问题描述】:

是否可以使用 Oracle 中的merge 函数修改多个表? 在每种情况下都需要采取不同的操作,例如:

MERGE INTO users tab1
USING(SELECT 1 id, 10 points FROM dual) tab2 
ON(tab1.id = tab2.id ) 
WHEN MATCHED THEN 
   UPDATE SET points = tab2.points 
   UPDATE "abc" = action.status -- another table
WHEN NOT MATCHED THEN 
   INSERT(id, points)  VALUES(tab2.id, tab2.points) 
   UPDATE "def" = action.status -- another table

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    根据文档,简单的答案是否定的。 The syntax 支持一个表或视图。但是,使用可更新视图,您可以完成多表插入/更新。

    然而,你的例子似乎试图做一些你不能做的事情。 WHEN MATCHED 子句指定要更新的内容。您不能从此子句插入。 WHEN NOT MATCHED 子句也一样——你不能从这个子句更新,只能插入。

    【讨论】:

    • "但是,使用可更新视图,您可以完成多表插入/更新。"几乎不。我搜索了(and asked),似乎不支持。一个典型的错误是:ORA-38106: MERGE not supported on join view or view with INSTEAD OF trigger.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 2020-03-03
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多