2016/05/10

UPSERT のサンプル - データがあればUPDATE、なければINSERT


  • Goal
    データがあればUPDATE、なければINSERTする。
    APEXのダイナミックアクションでの利用を想定しており、ボタンをクリックした際にプロシージャで呼び出して、テーブルのUPSERTをする。
  • How
    Merge文を使う
    COLUMN1-4がキーで、FlagをUPSERTする
     
  • Source

    PROCEDURE UPSERT_TABLE(C_1 in VARCHAR2,
    C_2 in VARCHAR2,
    C_3 in VARCHAR2,
    C_4 in VARCHAR2)
    as
    BEGIN
    MERGE INTO <TARGET TABLE> A
    USING DUAL --- プロシージャで1件ずつ追加/上書するなら、DUALで可能
    ON (<COLUMN_1> = C_1
    and <COLUMN_2> = C_2
    and <COLUMN_3> = C_3
    and <COLUMN_4> = C_4)
    WHEN matched then
    update set <FLAG> = case <FLAG> when 1 then 0
    when 0 then 1
    END
    WHEN not matched then
    insert(<COLUMN_1>,<COLUMN_2>,<COLUMN_3>,<COLUMN_4>,<FLAG>)
    values(C_1,C_2,C-3,C_4,1);
    end;
    view raw UPSERT.sql hosted with ❤ by GitHub

0 件のコメント:

コメントを投稿