oracle merge intoの使い方

1815 ワード

用途:
mergeコマンドは
1つのテーブルのデータで別のテーブルを変更または挿入します.挿入または変更の操作はon文の条件に依存します.
この文は、同じ文で2つのステップを実行でき、複数のinsert文とupdate文の実行を減らすことができます.
mergeは、同じmerge文で同じレコードを複数回変更することはありません.
構文:
1.into句
into句で変更または挿入するデータのターゲットテーブルを指定します
2.using句
USing句で、変更または挿入に使用するデータソースを指定します.データ・ソースは、テーブル、ビュー、またはサブクエリ文です.
3.on句
on句で挿入または変更を実行する条件を指定します.ターゲット・テーブルの条件に合致する各ローについて、oracleはデータ・ソースの対応するデータでローを変更します.条件を満たさないローの場合、oracleはデータ・ソースに対応するデータを挿入します.
4.when matched | not matched
この句でoracleが条件を満たすか満たさないかの結果に対して対応する操作を行う方法を通知します.次の2種類の句を使用できます.
5.merge_update句
merge_update句は、ターゲットテーブルのフィールド値の変更を実行します.on句条件を満たす場合に実行する.修正句が実行されると、ターゲットテーブルの変更トリガがトリガーされます.
制限:ビューを変更するとdefault値を指定できません.
6.merge_Insert句
merge_Insert句実行on句条件に合致しない場合、ターゲットテーブルにデータを挿入します.挿入句が実行されると、ターゲットテーブルに挿入されたトリガがトリガーされます.
.制限:ビューを変更するとdefault値を指定できません.
----------------------
merge into bonuses d

using (select employee_id, salary, department_id from employees

where department_id = 80) s

on (d.employee_id = s.employee_id)

when matched then update set d.bonus = d.bonus + s.salary*.01

when not matched then insert (d.employee_id, d.bonus)

values (s.employee_id, s.salary*0.01); 

---------------------
merge into sup_temp_authorization_temp t

using (select business_id, userid, end_date from 
sup_temp_authorization) s

on (t.business_id = s.business_id and t.userid = s.userid)

when matched then

  update set t.end_date = sysdate + 1

when not matched then

  insert(business_id, userid, end_date, creation_date)

  values('A', 'B', 'C', 'D')