Hallo,
ich arbeite mit oracle 8i. seit ein paar Tage bekomme ich die folgene Fehlermedung:
ORA-04091 table . is mutating. trigger/function may not see it.
Das ist nicht verständlich, weil ich in dem Bereich, wo der Fehler herkommt, keine Änderungen gemacht habe.
Das Modul, wo der Fehler herkommt, sieht so aus:
*****************************
for rc_ouga in c_ouga(v_slave_nid, v_slave_aid) loop
begin
update tb_object_user_group_access
set ouga_objr_obje_n_id = v_master_nid,
ouga_objr_obje_a_id = v_slave_aid_new
where rowid = rc_ouga.rid;
exception
when dup_val_on_index then
delete from tb_object_user_group_access
where rowid = rc_ouga.rid;
end;
end loop;
***************************
Habe noch Commit eingebaut direkt nach Update, aber das hat leider nicht geholfen. Das Modul ist mit Form 4.5 erstellt worden.
Du hast versucht auf eine Tabelle zuzugreifen, während gerade ein Update läuft. Das darf man nicht, da die Reihenfolge einer Änderung nicht festgelegt ist. Typischerweise tritt dies bei einem TRIGGER BEFORE mit FOR EACH ROW auf. Die Lösung lautet: zuerst die Schlüssel der Daten beim Ändern/Eintragen in eine Hilfstabelle (GLOBAL TEMPORARY TABLE) schreiben und mit einem Befehls-TRIGGER AFTER die Hilfstabelle auslesen und die eigentliche Funktion ausführen.
Schau mal im Google unter der Fehlermeldung nach, da findest du tausende Beiträge.
Gruß
Peter
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]