"トリガーが多いデータベースがありますが、カスケードすることができます。"
これは、多くの人々がトリガーを分析する理由の1つに過ぎません。
「 クエリを実行する前に解雇だろうかトリガーを知る方法はあります」いいえ、あなたはUPDATEトリガー本体に見つけるかもしれない何かを考えてみましょう:
if :new.sal > :old.sal * 1.2 then
insert into big_pay_rises values (:new.empno, :old.sal, :new.sal, sysdate);
end if;
を
BIG_PAY_RISESのトリガが起動するかどうかをどのように判断できますか?アルゴリズムによっては、DML文を解析できない場合もあります。
DBA_TRIGGERSおよびDBA_DEPENDENCIESを再帰的に検索して、がカスケード内のすべてのトリガーを識別できるようにすることをお勧めします。しかし、どんなシナリオでも確実に発射されるものを特定することは不可能です。
"またはそれを実行した後(トリガされたトリガはまだコミットされていません)?
他の人が指摘したように、ロギングは一つの選択肢です。しかし、Oracle 11gを使用している場合、PL/SQL階層プロファイラという別のオプションがあります。これは、トリガーを含むPL/SQLの呼び出し、で触れたすべてのPL/SQLプログラム・ユニットを追跡する非侵入型のツールです。階層型プロファイラの優れた機能の1つは、他のスキーマに属するPUが含まれていることです。これは、カスケードトリガで役立つ可能性があります。
したがって、SQLを無名ブロックにラップし、階層プロファイラで呼び出すだけで済みます。次に、トリガーされたトリガーのみを表示するためにレポートをフィルターに掛けることができます。 Find out more。
出典
2012-03-02 14:02:56
APC
トリガーの実行をシミュレートする方法はわかりませんが、トリガー本体を変更できる場合は、名前とタイムスタンプを持つ専用テーブルに挿入などのログ文を追加したい場合があります。 ところで:もしあなたが11gを使用していれば、複合トリガを見てください。 – Toby
@Toby、ログステートメントを追加することはアイデアですが、すべてを書き直すことになります。複合トリガーを見ても、まだ9iを使用しているお客様がいます。 – Benoit