0

場合によっては、レコードがテーブルに挿入されるときに、代わりに挿入されるいくつかのレコードに分割する必要があります。

ロジックは、INSERT 操作の前に起動する INSERT トリガー内に記述されます。このトリガー内で INSERT ステートメントを実行しようとしていますが、これによりトリガーの再帰呼び出しが発生します。しかし、私はこれが起こることを望んでいません。次のようなsmthを使用して、本体からトリガーを無効にしようとしました

execute immediate 'ALTER TRIGGER sale_trigger DISABLE';

ただし、明らかにこれはコミット操作であるため、トリガー内からは機能しません。

このトリガーの再帰呼び出しを回避するにはどうすればよいですか?

編集トリガーをこれとして宣言したので、ステートメントdeclare PRAGMA AUTONOMOUS_TRANSACTION;を実行できるようになりました。alterただし、同じトリガーからトリガーを無効にすると、PLSQL 開発者が作業を停止します。私は何をしますか?:)

4

1 に答える 1

0

最初の挿入をターゲット テーブルに直接ロードする代わりに、レコードをステージング テーブルに挿入します。面倒なロジックを含むトリガーは、ステージング テーブルに配置する必要があります。ロジックが適用されない場合、トリガーは行をターゲット表に挿入します。ロジックが適用される場合、トリガーは行を挿入し (必要な場合)、ターゲット テーブルへの追加の挿入が必要な場合は起動します。定期的にステージング テーブルを切り捨てて、小さくて効率的な状態に保ちます (ただし、効率が低下するため、各トリガー操作の後ではない可能性があります)。

つまり、挿入先のテーブルからトリガーを分離します。

于 2013-07-11T14:27:22.193 に答える