1
Oracle PL/SQLを使用して関数を作成しようとしています。この関数はトリガーの内部で呼び出されます。私はトリガーをコンパイルするときにエラーが見つかりませんでしたが、テーブルに挿入するとkrsが表示されますトリガー内で関数を呼び出す方法
ORA-04091: table TIKET_BUS.KRS is mutating, trigger/function may not see it
ORA-06512: at "TIKET_BUS.GET_BIAYA_SEMESTER", line 4
ORA-06512: at "TIKET_BUS.GET_BIAYA_SEMESTER", line 17
ORA-06512: at "TIKET_BUS.TAGIH", line 4
ORA-04088: error during execution of trigger 'TIKET_BUS.TAGIH'
私は何が欠けていますか?
機能:
create or replace FUNCTION GET_BIAYA_SEMESTER
(NO_INDUK CHAR) RETURN NUMBER IS
CURSOR C_IPK IS
SELECT
k.SKS, n.kd_semester
FROM
MATA_KULIAH k, krs n
WHERE
k.KD_MK = n.kd_mk and n.nim = NO_INDUK;
BARIS C_IPK%ROWTYPE;
S MAHASISWA.NAMA%TYPE;
TOTAL_BIAYA NUMBER := 0;
X NUMBER;
SKS NUMBER;
BIAYA NUMBER;
BEGIN
OPEN C_IPK;
LOOP
FETCH C_IPK INTO BARIS;
EXIT WHEN C_IPK%NOTFOUND;
X := BIAYA_MAKUL(BARIS.SKS);
TOTAL_BIAYA := total_BIAYA + X;
END LOOP;
BIAYA := TOTAL_BIAYA;
CLOSE C_IPK;
RETURN BIAYA;
END;
トリガ:
create or replace trigger tagih
after insert on krs
for each row
declare
x number;
begin
x := get_biaya_semester(:new.nim);
update tagihan set bayar = (x) where nim = :new.nim;
end;
このリンクを調べてください:https://dba.stackexchange.com/questions/5432/what-are-the-causes-and-solutions-for-mutating-table-errors – krokodilko