About Me
Kategori
- Artikel Paket A (5)
- Artikel Paket B (1)
- Artikel Paket C (3)
- Artikel Paket D (3)
- Artikel Paket E (2)
- Cafe (2)
- Kegiatan (6)
- Kepengurusan (7)
- Logo KOPMA (1)
- Minikom (1)
- Oracle (1)
- Sejarah KOPMA (1)
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 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
Referensi:
Blog Hendra,
http://sn.hendra.blogspot.com
Langganan:
Komentar (Atom)

