ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
レコードが存在しなければINSERT、レコードが存在すればUPDATEする(MERGE)
スポンサード リンク

データがあればUPDATE、なければINSERTするにはMERGE文を使用する

MERGE INTO テーブル1
  USING テーブル2|副問合せ
  ON (結合条件)
WHEN MATCHED THEN 
   update 文
WHEN NOT MATCHED THEN 
   insert 文
結合条件に一致すれば、テーブル1をupdateする。一致しなければテーブル1にinsertする。update/insertするデータは、テーブル2(副問合せ)のデータを使用できる。


例1) 表「emp01」の列「emp_id」と表「emp02」の列「emp_id」が一致すれば、emp01へupdateする。一致しなければ、insertする。
merge into emp01 t
     using emp02 f
     on ( t.emp_id = f.emp_id )
when matched then
      update set
         t.dept_id = f.dept_id,
         t.job_id = f.job_id,
         t.first_name = f.first_name,
         t.last_name = f.last_name,
         t.salary = f.salary
when not matched then
      insert (
         emp_id,
         dept_id,
         job_id,
         first_name,
         last_name,
         salary)
      values (
         f.emp_id,
         f.dept_id,
         f.job_id,
         f.first_name,
         f.last_name,
         f.salary)


スポンサード リンク


SELECTの結果をINSERTする
SELECTの結果から条件により、INSERTするテーブルを振り分ける(INSERT〜WHEN)
SELECTで取得した値でUPDATEする
更新レコードのデータによって、UPDATEする内容を変更する
レコードが存在しなければINSERT、レコードが存在すればUPDATEする(MERGE)
SELECTで取得した値をキーにDELETEする
重複したレコードをDELETEする

SQL(DML2) へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ