分割されたテーブルと更新関数/トリガーがあります。行が更新されると、最初に行が削除され、次に適切なパーティションに挿入されます。私の質問は、Oracle で MERGE に似たステートメントを実行しようとしているということです。次のような UPSERT を使用した Postgres での同様の実装への参照を見つけました。
WITH upsert as
(
update mytable2 m
set sales=m.sales+d.sales,
status=d.status
from mytable d
where m.pid=d.pid
RETURNING m.*
)
insert into mytable2
select a.pid, a.sales, 'NEW'
from mytable a
where a.pid not in (select b.pid from upsert b);
ただし、問題は、更新が最初に発生することです。特定の行で削除と挿入が発生し、その後、挿入が再度挿入されます。これは、パーティションの更新機能/トリガーによるものです。これを Oracle でのマージ (つまり、行が見つかった場合は更新、そうでない場合は挿入) のように機能させる方法はありますか?
あなたの助けは大歓迎です!