MERGEについて

はてブ見てたら、SQLのMERGE文の記事について言及されていた。

でもこれって同一テーブルに対してできるんかなぁ。。

ってことなのでちょっとコードにしてみる。

ここの方法と同じだけども、確かこんな感じで。

CREATE TABLE User ( UserNo number(10,0) primary key, Name text, Age number(3,0) );

というテーブルがあったとしたら、

MERGE INTO User U USING ( SELECT ? UserNO, ? Name, ? Age FROM DUAL ) TMP ON ( U.UserNO=TMP.UserNO ) WHEN MATCHED THEN UPDATE SET U.Name = TMP.Name, U.Age = TMP.Age ) WHEN NOT MATCHED THEN INSERT ( UserNo, Name, Age ) VALUES ( TMP.UserNo, TMP.Name, TMP.Age );

UserNoがあれば更新、なければ追加です。 あと、? はバインドさせて適当な値を設定することを想定しています。

で、

「マージ」って意味合いの使い方じゃないしなぁ。。

この方法が正しいか否かだけども、UPSERT!と言うぐらいだし多分いいような気がする。 (ここ最近はOracle触ってないのでちょっと自信がないけども)