私はOracle Express 11gを使用しています。私は、このトリガーを作成しようとしています:トリガー行の削除を引き起こすUPDATEトリガーの作成
CREATE TRIGGER remove_useless_surveys
BEFORE UPDATE OF agent_id, agency_id, province_id ON surveys
FOR EACH ROW WHEN (
new.agent_id IS NULL AND
new.agency_id IS NULL AND
new.province_id IS NULL)
DELETE FROM surveys WHERE survey_code = :new.survey_code
AGENT_ID、agency_idとprovince_idは外部キーが、ONでSET NULL句を削除します。
3つの外部キーがすべてNULLに設定されている場合(参照される行が削除されるため)、surveysテーブルの行を削除する必要があります。
トリガは問題なくコンパイルしますが、条件の火災は、その後、私はこのエラーを取得するとき:
SQL error: ORA-04091: table REALESTATE.SURVEYS is mutating,
trigger/function may not see it ORA-06512: at
"REALESTATE.REMOVE_USELESS_SURVEYS", line 1 ORA-04088: error during
execution of trigger 'REALESTATE.REMOVE_USELESS_SURVEYS'
04091. 00000 - "table %s.%s is mutating, trigger/function may not see it"
*Cause: A trigger (or a user defined plsql function that is referenced in
this statement) attempted to look at (or modify) a table that was
in the middle of being modified by the statement which fired it.
*Action: Rewrite the trigger (or function) so it does not read that table.
実は、私はトリガーを起動した同じテーブルを編集しています知っています。しかし、私は更新を取り消したい、または確定する、私は気にしない、そしてその行を削除する。
私を助けることができますか?私は何をしようとしているのですか?
文は、トリガーまたはPL/SQLファンクションを実行することもできます。そのトリガー/関数は、トリガー/ function.Plsを起動したステートメントによって現在変更されているテーブルを変更または照会しようとしました。http://www.techonthenet.com/oracle/errors/ora04091.phpを確認してください。 – user1127214
@ user1127214:ええ、これはポイントです:) – gd1