ORACLE機能 SQL

[SQL] キーが存在すれば更新、無ければ挿入を行う(MERGE文)

投稿日:

MERGE文の書き方です。
MERGE文はキーが存在すれば更新、無ければ挿入を行うという処理を
1文で記載するSQLです。

構文

MERGE文の構文です。

サンプル

以下のテーブルを例にします。

【TBL_TOテーブル】
code(PK)namecntprice
100みかん15080
101りんご50120
102ぶどう30300
【TBL_FROMテーブル】
code(PK)namecntprice
100みかん25090
103パイナップル20500

例)tbl_fromテーブルの内容を、tbl_toテーブルへマージする

テーブルからマージする例
MERGE INTO tbl_to USING tbl_from ON (tbl_to.code = tbl_from.code) WHEN MATCHED THEN UPDATE SET tbl_to.name = tbl_from.name, tbl_to.cnt = tbl_from.cnt tbl_to.price = tbl_from.price WHEN NOT MATCHED THEN INSERT (code, name, cnt, price) VALUES (tbl_from.code, tbl_from.name, tbl_from.cnt, tbl_from.price) ;

tbl_toテーブルは以下の結果になります。

【TBL_TOテーブル】
codenamecntprice
100みかん25090
101りんご50120
102ぶどう30300
103パイナップル20500

100:みかん行が更新され、103:パイナップル行が挿入されました。

例)指定した値を、tbl_toテーブルへマージする

値を指定してマージする例
MERGE INTO tbl_to USING (SELECT '102' AS code, 'ぶどう' AS name, 35 AS cnt, 330 AS price FROM dual) val ON (tbl_to.code = val.code) WHEN MATCHED THEN UPDATE SET tbl_to.name = val.name, tbl_to.cnt = val.cnt tbl_to.price = val.price WHEN NOT MATCHED THEN INSERT (code, name, cnt, price) VALUES (val.code, val.name, val.cnt, val.price) ;

tbl_toテーブルは以下の結果になります。

【TBL_TOテーブル】
codenamecntprice
100みかん15080
101りんご50120
102ぶどう35330

102:ぶどう行が更新されました。

解説

  • MERGE文のON句に指定した列は、UPDATEに含めることはできないのでご注意ください。
    (ORA-38104エラーが発生します。)

関連項目


スポンサーリンク

スポンサーリンク

-ORACLE機能, SQL

執筆者:



comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スポンサーリンク