Wyzwalacze

Do każdej tabeli można określić 12 (wiersz/instrukcja x przed/po x insert/update/delete) typów wyzwalaczy. Może być więcej niż jeden wyzwalacz danego typu (nie ma kontroli nad kolejnością odpalania wyzwalaczy tego samego typu).
CREATE [OR REPLACE] TRIGGER nazwa_wyzwalacza
{BEFORE|AFTER} specyfikacja instrukcji --INSERT OR DELETE OR UPDATE OF kolumna, ...
ON tabela [FOR EACH ROW]
blok PL/SQL
Kolejność odpalania wyzwalaczy różnych typów zgodna ze zdrowym rozsądkiem: przed instrukcją, przed wierszem, po wierszu, ..., po instrukcji

Typowe sytuacje użycia wyzwalaczy:

  1. Sprawdzanie więzów spójności: przykład1. W wyzwalaczach wierszowych jest dostęp do starych i nowych wartości, np.:
    IF :NEW.sal < :OLD.sal
    
  2. Wykonywanie stałych czynności wymaganych po wykonaniu instrukcji: przykład2. Można sprawdzić jaka instrukcja odpaliła wyzwalacz. Służą do tego zmienne: INSERTING, DELETING i UPDATING.
  3. Do wykonywania obliczeń przed wstawieniem lub aktualizacją: przykład3. Albo druga wersja: przykład4.
  4. Wymuszanie więzów spójności niemożliwych do zrealizowania deklaratywnie: przykład5.

Ograniczenia:

Te ograniczenia są z dokumentacji do porzednich wersji Oracla. Teraz jest troche inaczej. Proszę wypróbować wyzwalacze z przykładów. Ich nazwa wskazuje, czy według tych zasad powinnych działać czy nie.

Wyzwalacze typu INSTEAD OF

Istnieje dodatkowy typ wyzwalacza dla perspektyw:
CREATE [OR REPLACE] TRIGGER nazwa_wyzwalacza
INSTEAD OF specyfikacja instrukcji
ON perspektywa
blok PL/SQL

Jest odpalany ZAMIAST podanej w definicji instrukcji. przykład9