Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Oracle ORA-04091: table GAZIK.TBL_DOKUMENT is mutating, trigger/function may not see it

133 views
Skip to first unread message

Wito

unread,
Apr 17, 2009, 7:55:48 AM4/17/09
to
Witam

Mam trigera i procedure. Po zmianie danych (update) w tabeli
tbl_dokument jest wywolana w wyzwalaczu do tej tabeli (after update)
procedura ktora pobiera z tego modyfikowanego wiersza dane z
pozostałych kolumn.
W efekcie takiej operacji dostaje komunikat:
Row 2: ORA-04091: table GAZIK.TBL_DOKUMENT is mutating, trigger/
function may not see it

Myslalem ze after update to juz jest zapis zatwierdzony i mozna sie do
niego dostac. W tej chwili zrobilem tak ze dane ktore pobieral select
w procedurze sa przekazywane przez trigger jako parametry wejsciowe
procedury.
Probowałem z kursorem (tak na ślepo) i efekt ten sam
Czy da się to zrobić bez przekazywania danych jako parametry?

Pozdr Wito

Thomas Olszewicki

unread,
Apr 17, 2009, 9:07:38 AM4/17/09
to

Wito,
Pokaz kod.
Thomas

Łukasz Ledóchowski

unread,
Apr 17, 2009, 2:47:29 PM4/17/09
to
Wito wrote:

> Mam trigera i procedure. Po zmianie danych (update) w tabeli
> tbl_dokument jest wywolana w wyzwalaczu do tej tabeli (after update)
> procedura ktora pobiera z tego modyfikowanego wiersza dane z
> pozostałych kolumn.
> W efekcie takiej operacji dostaje komunikat:
> Row 2: ORA-04091: table GAZIK.TBL_DOKUMENT is mutating, trigger/
> function may not see it

Jeżeli to jest trigger for each row to tablica jest jeszcze w trakcie
zmian. Zazwyczaj w takiej sytuacji zapisuję sobie w triggerze for each
row wszystkie potrzebne dane do tabeli tymczasowej, a w triggerze for
statement korzystam z nich do wykonania niezbędnych operacji. W Oracle
11 możesz skorzystać z compound triggers i uprościć trochę tą procedurę.


--
Łukasz Ledóchowski
GG:503647 luk...@tlen.pl

Wito

unread,
Apr 20, 2009, 1:14:46 AM4/20/09
to

OK dzieki. Zostawie tak jak jest czyli podam 5 wartosci jako parametry
do procedury i tez bedzie dobrze. Szkoda ze bezpłatny Firebird sobie z
czymś takim radzi a Oracle nie.

Sławomir Szyszło

unread,
Apr 20, 2009, 1:55:21 PM4/20/09
to
Dnia Sun, 19 Apr 2009 22:14:46 -0700 (PDT), Wito <wolew...@gmail.com>
wklepał(-a):

>OK dzieki. Zostawie tak jak jest czyli podam 5 wartosci jako parametry
>do procedury i tez bedzie dobrze. Szkoda ze bezpłatny Firebird sobie z
>czymś takim radzi a Oracle nie.

Tu masz jak to obejść:
http://asktom.oracle.com/tkyte/Mutate/
--
Sławomir Szyszło
Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych
FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/
Archiwum http://groups.google.com/groups?group=pl.comp.bazy-danych

0 new messages