これを試すことができます
1 MERGE
2 INTO target_table tgt
3 USING source_table src
4 ON ( src.object_id = tgt.object_id )
5 WHEN MATCHED
6 THEN
7 UPDATE
8 SET tgt.object_name = src.object_name
9 , tgt.object_type = src.object_type
10 WHEN NOT MATCHED
11 THEN
12 INSERT ( tgt.object_id
13 , tgt.object_name
14 , tgt.object_type )
15 VALUES ( src.object_id
16 , src.object_name
17 , src.object_type );
構文は最初は少し気が遠くなるように見えますが、上から下に読んでいくと、非常に直感的です。次の句に注意してください。
•MERGE(1行目):前述のように、これはOracleの4番目のDMLステートメントになりました。追加したいヒントは、このキーワードの直後に続きます(つまり、MERGE / * + HINT * /);
•INTO(2行目):これは、MERGEのターゲットを指定する方法です。ターゲットは、テーブルまたは更新可能なビューのいずれかである必要があります(インラインビューはここでは使用できません)。
•USING(3行目):USING句は、MERGEのソースデータセットを表します。これは、単一のテーブル(この例のように)またはインラインビューにすることができます。
•ON()(4行目):ON句は、ソースデータセットとターゲットテーブルの間の結合を提供する場所です。結合条件は括弧で囲む必要があることに注意してください。
•WHENMATCHED(5行目):この句は、ターゲットテーブルに一致するレコードがすでにある場合(つまり、ソースデータセットとターゲットデータセットの間に結合がある場合)に何をするかをOracleに指示する場所です。この場合、明らかにUPDATEが必要です。この句の制限の1つは、ON句で使用されている列を更新できないことです(もちろん、すでに一致しているため、更新する必要はありません)。結合列を含めようとすると、直感的でない無効な識別子の例外が発生します。および
•WHENNOTMATCHED(10行目):この句は、現在一致するものがないレコードを挿入する場所です。