2012-05-14 3 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は、1つの表またはビューをサポートします。ただし、更新可能なビューでは、マルチテーブルの挿入/更新を行うことができます。

あなたの例は、あなたができないことをしようとしているようです。 WHEN MATCHED句は、更新するものを指定します。この句からINSERTすることはできません。 WHEN NOT MATCHED句の場合と同じことです。この句からはUPDATEできません。INSERTのみです。

+0

"ただし、更新可能なビューでは、マルチテーブルの挿入/更新を行うことができます。ほとんど。私は検索しました([と質問](http://stackoverflow.com/questions/37690394))、それはサポートされていないようです。典型的なエラーの1つは、 'ORA-38106:MERGEはINSTEAD OFトリガを使用して結合ビューまたはビューでサポートされていません。 ' –