2008年02月24日

Oracle10gにおけるMERGE文の拡張

MERGE文のUPDATE句とINSERT句でWHERE句の使用ができるようになったそうです。

例えば、商品マスタがあって↓
20080224MST_SHOHIN.jpg

これに対して、差分商品マスタ↓
20080224SABUN_SHOHIN.jpg

の内容をマージしたい場合で、ただし、当テーブルにはマージ処理からは除外したいレコードが含まれる(DEL列が'Y'のレコードはマージ対象外)ような場合、以下のようなSQL文を作成します。


MERGE INTO MST_SHOHIN ms
USING SABUN_SHOHIN ss ON (ms.id = ss.id)
WHEN MATCHED THEN
UPDATE SET name = ss.name, price = ss.price, upd_date = SYSDATE
WHERE ss.del = 'N'
WHEN NOT MATCHED THEN
INSERT VALUES(ss.id, ss.name, ss.price, NULL);


結果は↓になります。
20080224RESULT_SHOHIN.jpg

商品Cのレコードは、更新されていないことがわかります。

posted by 台北猫々 at 00:10| Comment(0) | TrackBack(0) | 技術メモ(Oracle)
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/11341323

この記事へのトラックバック