1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【PL/SQL】MERGE=INSERT+UPDATE

Posted at

MERGE=INSERT+UPDATE

レコードの新規作成と更新を1文で記述することができます。

やりたいこと

WKテーブル

EMP_CD(主キー) EMP_NAME
E111111 aaa
E222222 bbb

TGTテーブル

EMP_CD(主キー) EMP_NAME
E111111 ddd

⇒レコードのがすでに存在すれば更新、存在しなければ新規作成を行います。
 実行結果は以下のようになります。

MERGE後TGTテーブル

EMP_CD(主キー) EMP_NAME
E111111 aaa
E222222 bbb

コード

注意点
・INSERT、UPDATEにはテーブル名は記述しない
・UPDATEでは比較対象となるカラムは記載しない

test.sql
MERGE INTO tgt tgt
    USING wk wk
    ON tgt.emp_cd = wk.emp_cd
WHEN MATCHED THEN
    UPDATE SET
        tgt.emp_name = wk.emp_name
WHEN NOT MATCHED THEN
    INSERT (tgt.emp_cd, tgt.emp_name)
    VALUES (wk.emp_no, wk.emp_name)
;

UPDATEかINSERTのみ

MERGE文ではUPDATEまたはINSERTのみの実行も可能です。
以下の例を実行すると新規作成のみ行われます。

test.sql
MERGE INTO tgt tgt
    USING wk wk
    ON tgt.emp_cd = wk.emp_cd
WHEN NOT MATCHED THEN
    INSERT (tgt.emp_cd, tgt.emp_name)
    VALUES (wk.emp_no, wk.emp_name)
;

MERGE後TGTテーブル

EMP_CD(主キー) EMP_NAME
E111111 ddd
E222222 bbb
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?