Triggery w PostgreSQL
Paweł Kraszewski, pt., 12/09/2008 - 10:19
Trigger definiuje się następującą składnią:
CREATE TRIGGER nazwa -- każdy trigger musi się jakoś nazywać
BEFORE albo AFTER -- czy trigger ma być wykonany przed czy po wydarzeniu
INSERT albo UPDATE albo DELETE -- których wydarzen trigger dotyczy, można połączyć kilka przez OR)
ON tabela -- trigger zawsze zakłada się na konkretną tabelę
FOR EACH
ROW albo STATEMENT -- czy trigger ma być wywołany raz na rekord, czy raz na instrukcję
EXECUTE PROCEDURE procedura(parametry);-- co ma być wywołane jako obsługa triggera
BEFORE albo AFTER -- czy trigger ma być wykonany przed czy po wydarzeniu
INSERT albo UPDATE albo DELETE -- których wydarzen trigger dotyczy, można połączyć kilka przez OR)
ON tabela -- trigger zawsze zakłada się na konkretną tabelę
FOR EACH
ROW albo STATEMENT -- czy trigger ma być wywołany raz na rekord, czy raz na instrukcję
EXECUTE PROCEDURE procedura(parametry);-- co ma być wywołane jako obsługa triggera
Trigger usuwa się następującą składnią:
DROP TRIGGER nazwa ON tabela -- usunięce konkretnego triggera z konkretnj tabeli
Tak więc, aby wywołać funkcję skasowano() po każdym skasowaniu rekordu z bazy rejestr należy wydać następujące polecenie:
CREATE TRIGGER mojtrigger AFTER DELETE ON rejestr FOR EACH ROW EXECUTE PROCEDURE skasowano();
Efekty uboczne w fazie BEFORE
Triggery w fazie BEFORE mogą mieć dwa różne efekty uboczne:
- W przypadku wszystkich wydarzeń - jeżeli procedura triggera zwróci wartość NULL, to dana czynność ma zostać anulowana i dalsze triggery związane z tą czynnością nie zostaną wywołane. Często mówi się, że taki trigger wetuje jakąś operację.
- W przypadku wydarzeń UPDATE i INSERT procedura triggera może zwrócić nową zawartość rekordu i wtedy ta właśnie wartość (a nie ta wynikająca z parametrów instrukcji UPDATE lub INSERT INTO) znajdzie się w bazie.
Macierz triggerów
| wydarzenie/faza | BEFORE | AFTER |
|---|---|---|
| INSERT |
|
|
| UPDATE |
|
|
| DELETE |
|
|
- Wersja do wydruku
- Odpowiedz
- 1540 odsłon
- Wersja PDF


Ostatnie odpowiedzi
5 dni 15 godzin temu
5 dni 20 godzin temu
1 tydzień 2 dni temu
8 tygodni 5 godzin temu
8 tygodni 1 dzień temu