Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Trigger przy update, Pozwolenie na wykonanie update'a
m1s1ek
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 8.11.2004

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


Jak napisac trigger, ktory podczas update'a sprawdzi czy podane wartosci w zapytaniu spelniaja warunki, a potem pozwoli na wykonanie owego update'a albo nie?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
prond
post
Post #2





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

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


Jeżeli funkcja trigger wywoływana przed operacją update (BEFORE UPDATE) zwraca null to operacja jest anulowana:
  1. CREATE FUNCTION my_update_trigger() RETURNS OPAQUE AS $$
  2. DECALRE
  3. #deklaracje zmiennych
  4. BEGIN IF (NEW.name NOT LIKE '%brzydki wyraz%')
  5. RETURN NEW;
  6. ELSE
  7. RETURN NULL;
  8. END IF;
  9. END; $$ LANGUAGE 'plpgsql';


No, a żeby przypiąć tę funkcję jako triggera dla tabelki 'tabela' wystarczy tak:
  1. CREATE TRIGGER my_trigger BEFORE UPDATE ON tabela
  2. FOR EACH ROW EXECUTE PROCEDURE my_update_trigger();
Go to the top of the page
+Quote Post
m1s1ek
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 8.11.2004

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


Wielkie dzięki (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Elokwent
post
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 30.05.2005

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


Pozwólcie że się dołączę. Mam podobny problem.
Chcę stworzyć triggera przy update, który sprawdza wartość w updatowanym wierszu i jeśli jest spełniony warunek, to robi update tego samego wiersza lecz innej kolumny. Problem w tym, że coś nie działa (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Stworzyłem coś następującego:

  1. CREATE OR REPLACE FUNCTION zmien_stan_func() RETURNS TRIGGER AS $zmiana_stanu_trig$
  2. BEGIN IF (NEW.logowanko > 5) THEN
  3. NEW.aktywny = false;
  4. END IF;
  5. RETURN NEW;
  6. END;
  7. $zmiana_stanu_trig$ LANGUAGE plpgsql;

i do tego triger na tablicy
  1. CREATE TRIGGER zmiana_stanu_trig AFTER UPDATE ON uzytkownicy
  2. FOR EACH ROW EXECUTE PROCEDURE zmien_stan_func();


Już znalazłem rozwiązanie
http://www.kraszewscy.net/Triggery_(PostgreSQL)
TRIGGER musi być BEFORE a nie AFTER. W przypadku AFTER dane są już fizycznie wstawione do tabeli i nie można zmienić wstawioanych wartości poprzez NEW.

Ten post edytował Elokwent 18.09.2007, 14:15:53
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 10:35