Я пытаюсь создать функцию с помощью 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;