2010-11-24 14 views
1

Oracleでは、次のようなMERGE文を使用します。両方のテーブルでMERGEを更新できますか?

merge into live_table l 
using (
    select * 
    from staging_table 
    where merged = 'N' 
) s 
on (i.id = s.id) 
when matched then 
    update l.description = s.description 
when not matched then 
    insert (l.id, l.description) 
    values (s.id, s.description) 
; 

ステージング表には、マージ後に「Y」に更新する「マージ済」フラグも含まれています。

しかし、これは以前のトランザクションで既にマージされたレコードのフラグも更新します。これを回避するには、挿入/更新を1つずつ処理するループとして記述しますが、これはMERGE文の容易さを損なうでしょう。

マージされたフラグを更新するにはどうすればマージステートメントの影響を受ける行だけが更新されると思いますか?

答えて

3

この例では、PL/SQLブロックを使用し、バルク・コレクション+バルク・バインドを使用して必要な問合せと更新/挿入を行います。

+0

既にそう考えていました。確認していただきありがとうございます! –

関連する問題