2012-05-14 68 views
6

是否可以使用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 

回答

7

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

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

+0

“但是,使用可更新的视图,您可以完成多表插入/更新。”几乎不。我搜索([和问](http://stackoverflow.com/questions/37690394)),似乎不支持。一个典型的错误是:ORA-38106:MERGE不支持连接视图或INSTEAD OF触发器视图。 –