ORA-04091: table AM is mutating, trigger/function may not see it
Error diatas bisa disebabkan karena pada bagian badan trigger terdapat SELECT statement yang membaca tabel sendiri pada saat tertentu dimana trigger akan dijalankan. misal seperti Trigger dibawah ini :
create or replace trigger hitungTelat
before update on transaksi
for each rowdeclare
id buku.id_buku%TYPE;
pinjam date;
hrskembali date;
telat number;
begin
id := :old.id_buku;
select tgl_haruskembali into hrskembali from transaksi where id_buku= id;
telat := sysdate - hrskembali;
if telat <= 0 then
telat := 0;
else
telat := telat;
end if;
:New.telat := telat;
end;
jika perintah Update dijalankan, maka error akan muncul. Untuk menghindari error tersebut maka gunakan pragma autonomous_transaction;
pada declarasi triggernya.
dari trigger diatas diubah menjadi:
create or replace trigger hitungTelat
before update on transaksi
for each rowdeclare
id buku.id_buku%TYPE;
pinjam date;
hrskembali date;
telat number;
pragma autonomous_transaction;
begin
id := :old.id_buku;
select tgl_haruskembali into hrskembali from transaksi where id_buku= id;
telat := sysdate - hrskembali;
if telat <= 0 then
telat := 0;
else
telat := telat;
end if;
:New.telat := telat;
end;
Selamat Mencoba....:D
----------------------------------------##############------------------------------------------
Dapatkan Tambahan Rupiah Dengan Klik Iklan Pada Sistem PTC, Setiap Anda Klik Iklan, Anda Akan Dibayar..
Untuk lebih jelasnya silahkan kunjungi Apa itu dbclix?
Untuk lebih jelasnya silahkan kunjungi Apa itu dbclix?
Silahkan Daftarkan Diri Anda Sebagai REFERRAL SAYA Disini (Klik Gambar):
terimakasih artikel ini sangat membantu.... ^_^
ReplyDelete