0

TARGETとSOURCEの2つのテーブルがあります。SOURCEテーブルの行を更新し、それらの更新された行をTARGETテーブルに挿入してから、元の行をSOURCEから削除する必要があります。現在、最初にSPを介してSOURCEテーブルを完全に更新してから、別のSPで移動操作を実行しています。

BEGIN P1:
insert into TARGET(select * from SOURCE where col=someValue)
delete from SOURCE where col=someValue;
END P1

私も

insert into TARGET(SELECT * FROM OLD TABLE(DELETE FROM SOURCE WHERE col=someValue))

しかし、これはSPでは機能しませんでした。

これは一般的なシナリオ、たとえば履歴/アーカイブテーブルであり、DB2でソリューションを使用している必要があると思います。パフォーマンスに影響を与えずにこれを達成するにはどうすればよいか誰かに教えてもらえますか?つまり、SPの実行に長い時間はかからないはずです。また、冗長な更新SPを削除できますか。代わりに、更新された行をTARGETに直接挿入し、対応する行をSOURCEから削除できますか。また、削除と挿入の操作を1回のトランザクションで行うことをお勧めします。それはパフォーマンスの低下を引き起こしますか?

4

1 に答える 1

1

私があなたの質問を正しく理解していて、これらがすべて更新である場合はTRIGGER、古い行を監査テーブルに入れるために a を作成できます (ただし、UPDATEトリガーを定義できるのは sだけではなく、トリガー可能でもINSERTありDELETEます)。何かのようなもの:

CREATE TRIGGER AUDIT_SOURCE
 AFTER UPDATE ON SOURCE
 REFERENCING OLD AS O
 FOR EACH ROW
 BEGIN ATOMIC
   INSERT INTO TARGET
     VALUES (O.Col1, O.Col2, ..., O.ColN);
 END
于 2012-04-27T22:19:14.473 に答える