誰かがこれを手伝ってくれることを願っています。私はトリガーを初めて使用し、変更されているレコードに特定の値があるかどうかを確認するトリガーを作成しようとしています。
たとえば、filing_id とfiling_status を持つ Filing というテーブルがあり、誰かがそのテーブル内の file_status="FILED" を持つレコードを更新または削除できないようにしたいと考えています。だから私は以下を持っている場合
Filing_id Filing_status Val
--------- ------------- ---
0 Filed X
誰かが Val を変更しようとした場合、トリガーはそれを停止する必要があります。次のトリガーを作成しました。
CREATE or replace TRIGGER TRG_PREV_FILING
BEFORE DELETE or UPDATE
ON PF.FILING
FOR EACH ROW
declare
rowcnt number;
BEGIN
SELECT COUNT(filing_id) INTO rowcnt FROM PF.FILING
where status = 'FILED'
and filing_id = :new.filing_id;
if (rowcnt > 0)
then
raise_application_error (-20100, 'You can not delete Or Update initial record');
end if;
END;
私が直面している問題は、「テーブルファイリングが変化しています。トリガー/関数が表示されない可能性がある」というORA-04091を取得していることです。
基本的に、トリガーを実行しているテーブルと同じテーブルでクエリを実行することはできませんか? それは私の場合の問題であり、誰かがこれを回避する方法を知っていますか?
どんな助けにも感謝します