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文の多用を回避できる可能性がある。
また、表へのアクセスは一度で済むため、パフォーマンスの向上に
繋がる。