最近、大規模で複雑なアプリケーションの作業を開始しましたが、次のエラーが原因でバグが割り当てられました。
ORA-04091: table SCMA.TBL1 is mutating, trigger/function may not see it
ORA-06512: at "SCMA.TRG_T1_TBL1_COL1", line 4
ORA-04088: error during execution of trigger 'SCMA.TRG_T1_TBL1_COL1'
問題のトリガーは次のようになります
create or replace TRIGGER TRG_T1_TBL1_COL1
BEFORE INSERT OR UPDATE OF t1_appnt_evnt_id ON TBL1
FOR EACH ROW
WHEN (NEW.t1_prnt_t1_pk is not null)
DECLARE
v_reassign_count number(20);
BEGIN
select count(t1_pk) INTO v_reassign_count from TBL1
where t1_appnt_evnt_id=:new.t1_appnt_evnt_id and t1_prnt_t1_pk is not null;
IF (v_reassign_count > 0) THEN
RAISE_APPLICATION_ERROR(-20013, 'Multiple reassignments not allowed');
END IF;
END;
テーブルには、主キー " t1_pk
"、"予定イベント ID"
t1_appnt_evnt_id
、および別の列 " t1_prnt_t1_pk
" があり、別の行の を含む場合と含まない場合がありますt1_pk
。
トリガーは、この行が別の行を参照している場合、この行が別の行への参照を参照しているのと同じものt1_appnt_evnt_id
を参照していないことを確認しようとしているようです。
DBA からのバグ レポートのコメントには、「トリガーを削除し、コードでチェックを実行する」と書かれていますが、残念ながら、Hibernate の上に階層化された独自のコード生成フレームワークがあるため、実際にどこにあるのかさえわかりません。書き出されるので、このトリガーを機能させる方法があることを願っています。ある?