2

複合トリガーの使用について非常に簡単な質問があります。

私はdatabase/sql / oracleに非常に慣れておらず、次のトリガーを作成する必要があるユニタスクがあります。

  1. 営業担当者が注文を作成するときにログテーブルに挿入します
  2. 注文を発送する準備ができたら、注文テーブルを更新します(さらにログに挿入します)
  3. 金曜日の午後5時から月曜日の午前9時まで、INSERT、UPDATE、DELETEを防止します。

トリガーの実装に成功しましたが、11gの複合トリガーに気づきました。上記を1つの複合トリガーに結合することを検討するのは適切でしょうか?それは彼らの目的ですか、それとも私は要点を見逃していますか?

このかなり漠然とした質問を見てくれてありがとう。

4

2 に答える 2

3

IMOそれは適切ではないでしょう。複合トリガーを使用すると、特定のテーブルの特定のアクションに対して4つの異なるトリガーポイント(ステートメントの前、アクションの前、アクションの後、ステートメントの後)をトラップできますが、A)複数のテーブルでトリガーしているように見えます。 B)すべての異なるトリガーポイントにサービスを提供する必要はありません。(ところで、ここで使用した「アクション」は、さまざまなステートメントタイプを意味する場合があります。たとえば、INSERT、UPDATE、DELETEの前などです)。

複合トリガーは、人気のないORA-04091 MUTATING TABLEエラーを回避するための、すてきでクリーンでコンパクトな方法になりますが、ほとんどの場合、汎用のすべての代替として必要または有用であるとは思いません。 「通常の」トリガー。例については、この質問に対する私の回答を参照してください。

共有してお楽しみください。

于 2012-05-15T16:20:39.527 に答える
1

うわー-複合トリガー-それらが存在することさえ知らなかった...

私はすぐにドキュメントを調べました

複合トリガーを使用する主な理由は次のとおりです。

複合トリガーを使用すると、さまざまなタイミングポイントに実装するアクションで共通のデータを共有するアプローチを簡単にプログラムできます。単純なトリガーで同じ効果を達成するには、補助パッケージを使用して共通の状態をモデル化する必要がありました。このアプローチは、プログラミングが面倒であり、トリガーステートメントがエラーを引き起こし、アフターステートメントトリガーが起動しなかった場合にメモリリークが発生する可能性がありました。

したがって、機能を実装するためにパッケージ変数が必要でない限り、それらを使用する理由はありません。そして、あなたのコードはもう10gと互換性がありません。

于 2012-05-15T16:13:57.510 に答える