Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> TRIGGER BEFORE UPDATE + UPDATE NA TEJ SAMEJ TABELI
llepec
post 15.07.2013, 09:32:20
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 3.07.2013
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Witam,

Próbuję napisać wyzwalacz, który po update'cie na tabeli, ponownie ją uaktualni (tj. wykona ponowny update)

tabela bledy (id_blad, id_uzytkownik, technologia, data_zgloszenia, data_zamkniecia, opis, id_pracownik, id_przypisanego, id_rodzaj, id_poziom, id_status)

Właściwie to pola tej tabeli nie muszą nas interesować. Chodzi tylko o data_zakmniecia oraz id_status.

Muszę napisać wyzwalacz, który po zmianie id_status na wartość 4, ustawi datę zamknięcia na SYSDATE.


  1. CREATE OR REPLACE TRIGGER zakmniecie_bledu_trig
  2. AFTER UPDATE OF ID_STATUS ON BLEDY
  3. FOR EACH ROW
  4. WHEN (new.ID_STATUS = 4)
  5. BEGIN
  6. UPDATE bledy SET data_zamkniecia = SYSDATE WHERE id_blad = :new.id_blad;
  7. END;


Podczas wykonania, odpowiedniego do uruchomienia wyzwalacza, zapytania, wyskakuje następujący błąd:
SQL Error: ORA-04091: table PROJECT.BLEDY is mutating, trigger/function may not see it
ORA-06512: at "PROJECT.ZAKMNIECIE_BLEDU_TRIG", line 2
ORA-04088: error during execution of trigger 'PROJECT.ZAKMNIECIE_BLEDU_TRIG'
04091. 00000 - "table %s.%s is mutating, trigger/function may not see it"
*Cause: A trigger (or a user defined plsql function that is referenced in
this statement) attempted to look at (or modify) a table that was
in the middle of being modified by the statement which fired it.
*Action: Rewrite the trigger (or function) so it does not read that table.



Moje pytania: Czy da się w ogóle zrobić coś takiego? Jeżeli tak, prosiłbym o wskazówki. Bo treść błędu sugeruje, że niemożliwe jest wykonanie update'a na aktualnie modyfikowanej tabeli...

Pozdrawiam.

Ten post edytował llepec 15.07.2013, 09:45:10
Go to the top of the page
+Quote Post
wiiir
post 15.07.2013, 09:51:20
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

Ostrzeżenie: (0%)
-----


Nie robi sie update

  1. CREATE OR REPLACE TRIGGER zakmniecie_bledu_trig
  2. AFTER UPDATE OF ID_STATUS ON BLEDY
  3. FOR EACH ROW
  4. WHEN (new.ID_STATUS = 4)
  5. BEGIN
  6. :new.data_zamkniecia := SYSDATE;
  7.  
  8. END;


Ten post edytował wiiir 15.07.2013, 09:52:01
Go to the top of the page
+Quote Post
llepec
post 15.07.2013, 09:55:57
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 3.07.2013
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Dziękuję smile.gif Nie wiem czemu tak to robiłem... haha.gif
Tak czy siak: problem solved smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 10:51