私はOracle Express 11gを使用しています。このトリガーを作成しようとしています:
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 DELETE SET NULL 句があります。
3 つの外部キーがすべて NULL に設定されている場合 (参照された行が削除されるため)、調査テーブルの行を削除する必要があります。
トリガーは問題なくコンパイルされますが、条件が発生すると、次のエラーが発生します。
SQL エラー: ORA- 04091 : テーブル REALESTATE.SURVEYS が変化しています。 トリガー
/関数はそれを認識しない可能性があり ます00000 - 「テーブル %s.%s は変更されています。トリガー/関数はそれを認識しない可能性があります」 *原因: トリガー (または このステートメントで参照されているユーザー定義の plsql 関数) が、 それを起動したステートメントによって変更されている途中でした。 *処置: その表を読み取らないようにトリガー(または関数)を書き直してください。
実際、トリガーを起動したのと同じテーブルを編集していることはわかっています。しかし、更新をキャンセルしたい、またはファイナライズしたいのですが、気にせず、その行を削除します。
手伝って頂けますか?どうすればやろうとしていることを達成できますか?