Oracle

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.

Gruß und Danke im Vorraus

Rezaei

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]

hi!

wie schon im vorposting erwähnt, hier wird auf eine tabelle zugegriffen (da reicht schon ein „normales“ select), die sich gerade ändert

der fehler liegt wahrscheinlich weniger in der forms-applikation, sondern eher an einem datenbanktrigger, der beim update losfeuert

grüße,
tomh