UPSERT(テーブルの更新または挿入)の方法 質問する

UPSERT(テーブルの更新または挿入)の方法 質問する

UPSERT 操作は、テーブルにデータに一致する行がすでに存在するかどうかに応じて、テーブル内の行を更新または挿入します。

if table t has a row exists that has key X:
    update t set mystuff... where mykey=X
else
    insert into t mystuff...

Oracle には特定の UPSERT ステートメントがないので、これを行う最善の方法は何でしょうか?

ベストアンサー1

MERGE ステートメント2 つのテーブル間でデータをマージします。DUAL を使用すると、このコマンドを使用できます。同時アクセスに対しては保護されないことに注意してください。

create or replace
procedure ups(xa number)
as
begin
    merge into mergetest m using dual on (a = xa)
         when not matched then insert (a,b) values (xa,1)
             when matched then update set b = b+1;
end ups;
/
drop table mergetest;
create table mergetest(a number, b number);
call ups(10);
call ups(10);
call ups(20);
select * from mergetest;

A                      B
---------------------- ----------------------
10                     2
20                     1

おすすめ記事