The Dragon Scroll

Be just and fear not.

10gがもたらす福音(12)〜MERGE文。

本日は、ちょっと地味に、MERGE文に関する拡張。
そもそもMERGE文とは何か?


条件にあえば、UPDATE文発行、あわなければINSERT文を発行する。


というのが、9iまで。
10gでは、


条件にあえば、UPDATE文発行、さらに条件にあえばDELTE文発行。


具体的には、
merge into hoge1
 using hoge2
 on (hoge1.hoge_code = hoge2.hoge_code)
 when matched then
  update set name = hoge2.name
   where hoge2.date >= '20010101'
  delete where hoge2.del_flag = 'Y'
 where not matched then
  insert values (hoge2.code,hoge2.name,hoge2.date)
のような形になる。


条件に一致するのであれば
①hoge2のnameで更新した値をセットする
②但し、①の条件として、hoge2.dateが2001年1月1日以降であること。
③さらに、対象行の中で、削除フラグが立っているものがあれば削除。
条件に一致しないのであれば
①INSERT文を発行する。


このSQLを使うことによって、更新または挿入を一度に行うことができる。
よって、アプリケーション側のif文の多用を回避できる可能性がある。
また、表へのアクセスは一度で済むため、パフォーマンスの向上に
繋がる。