Rabu, 05 Januari 2011

Ketika kita membuat suatu trigger terkadang terjadi error seperti dibawah ini:
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 row
declare
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 row
declare
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

Referensi:
Blog Hendra,
http://sn.hendra.blogspot.com 
Baca Selanjutnya..>> - Solusi Buat Error "ORA-04091: table XXX is mutating, trigger/function may not see it"

Chat BOX


ShoutMix chat widget

Statistik

Pengikut