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

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

関連記事

ORACLE

[SQL*Plus] ページ間の空白行の数を設定する(set newpage)

ページ間の空白行の数を設定するには、「newpage」システム変数を使用します。 構文 (表示構文) show newp ...
ORACLE

[ORACLE関数] 文字列中の文字を置き換える(REPLACE)

文字列中の文字を置き換えるには、REPLACE関数を使用します。 構文 (REPLACE構文) REPLACE(<対象文 ...
ORACLE

[ORACLE] ロールに付与されている権限を確認する

ロールに付与されている権限を確認するには、ROLE_SYS_PRIVSを検索すればOKです。 サンプル 例)ロールに付与 ...
ORACLE

[ORACLE関数] 指定した単位でMIN値を取得する(MIN~OVER)

指定した単位でMIN値を取得するには、MIN~OVER句を使用します。 サンプル 以下のテーブルを使用します。 【T_S ...
ORACLE

[PL/SQL] WHILE文を使う

PL/SQLでのWHILE文サンプルです。 構文 (WHILE構文) WHILE <条件> LOOP  --繰り返し処理 ...

スポンサーリンク