21

テーブル target_table にいくつかのレコードを挿入/更新する必要があります。これらのレコードは 1 つの source_table になります。

target_table の更新/挿入に MERGE を使用しています。

MERGE
   INTO  target_table tgt
   USING source_table src
   ON  ( src.column1 = tgt.column1 and
         src.column2 = tgt.column2)
WHEN MATCHED
THEN
   UPDATE
   SET   tgt.column3= src.column3,
         tgt.column4 = src.coulmn4   
WHEN NOT MATCHED
   THEN
INSERT ( tgt.column1,
         tgt.column2,
         tgt.column3,
         tgt.column4 )
VALUES ( src.coulmn1,
         src.coulmn2,
         src.coulmn3,
         src.coulmn4);

更新時に特定の条件を追加したい。

IF target_table.column3 in (val1','val2)

その場合は更新のみが必要であり、それ以外の場合は更新も挿入もありません。

4

2 に答える 2

37

WHEREに句を追加するだけですUPDATE詳細については、Oracle ドキュメントを参照してください。

したがって、あなたの場合は次のようになります。

...
WHEN MATCHED
THEN
   UPDATE
   SET   tgt.column3= src.column3,
         tgt.column4 = src.coulmn4
   WHERE tgt.column3 IN (val1, val2) 
WHEN NOT MATCHED
...
于 2013-01-25T10:35:01.727 に答える