Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Trigger przy update
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
m1s1ek
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?questionmark.gif
prond
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();
m1s1ek
Wielkie dzięki biggrin.gif
Elokwent
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 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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.