2010-12-06 11 views
1

は、だから私はテーブルfooを持っていると私はトリガーt_foo火災時に他のfoo行を削除したいと思います:ORA-04091 - トリガーが起動する表を変更するにはどうすればよいですか。

CREATE OR REPLACE TRIGGER "t_foo" AFTER INSERT OR DELETE OR UPDATE ON foo 

/*delete some other records from foo that are not :NEW.* or :OLD.* \* 

がどのように変異されORA-04091:テーブル名を取得せずにこれを行うに行くか、トリガー/関数が表示されない場合がありますそれ。これも可能ですか?

+0

トリガーでテーブルの構造を変更したいですか?私はそれを正しく読んでいますか? – HLGEM

+0

申し訳ありませんが、構造体ではなくfoo行を変更することを意味します... – Shawn

答えて

8

ストアドプロシージャで、トランザクションで挿入と削除をラップし、この副作用の動作を明確に文書化できる理由は何ですか?

+0

を編集します。したがって、削除ロジックをストアドプロシージャに置き、このトリガーから呼び出すと言っていますか? – Shawn

+0

いいえ。SPを直接呼び出すと、行を挿入し、トランザクションでラップされた副作用の削除を実行します。 SP +トランザクションのアプローチは、テーブルの変更の混乱を避け、より自己文書化しています。 – Tim

2

これは基本的に、テーブル内に相互依存する行が存在することを意味し、列から主キーへの自己参照を持つ階層構造を意味します。 ON DELETE CASCADEについて考えましたか?

関連する問題