OracleのMERGE INSERT/UPDATEを同時に実行【SQL】

OracleのMERGE(マージ)

OralceでデータがあればUPDATEを、なければINSERTするにはMERGEを使います。

例1. テーブル結合してMERGEするパターン

ここでは「emp_temp」テーブルから「emp」テーブルへMERGEしました。結合条件は「empno」が一致するレコードです。「emp」テーブルにデータがあればUPDATEが実行され、なければINSERTが実行されます。

注意点として、UPDATE・INSERTに通常記述するテーブル名は記述しないという点です。

例2. 指定した値をMERGEするパターン

ここではテーブルではなく値をMERGEします。登録・更新する値が決まっている場合はこちらです。「empno=A001」があれば、「emp_name=山田太郎」「depno=X1G」に更新、なければ登録します。

「USING」のあとにテーブル名ではなく、「SELECT 値 FROM DUAL」とします。SELECTでダミー表としてDUALを使って値を並べれば、MERGEの結合条件として使用できます。SELECTの値は別名をつけておきます。

以上、OracleのMERGEのパターンでした。