Wyzwalacze
Przegląd zagadnień
Czym są wyzwalacze i kiedy je stosujemy
Rodzaje wyzwalaczy
Podsumowanie
Laboratorium
Czym są wyzwalacze i kiedy je stosujemy?
Wyzwalacz (ang. trigger) jest specjalnym rodzajem
procedury składowanej. W przeciwieństwie do
zwykłej procedury składowanej wyzwalacz nie może
zostać jawnie wywołany.
Wyzwalacz jest wywoływany w reakcji na określone
akcje.
Akcje te, to wykonanie przez użytkownika
określonego polecenia SQL (INSERT, UPDATE,
DELETE) na danej tabeli, dla której został określony
wyzwalacz.
Tworzenie wyzwalaczy
Wyzwalacze tworzymy używając polecenia CREATE
TRIGGER.
W definicji wyzwalacza określamy:
•
nazwę wyzwalacza;
•
dla jakiej tabeli tworzymy wyzwalacz;
•
na jakie akcje wyzwalacz będzie reagował;
•
jakiego typu wyzwalacz tworzymy;
•
ciało wyzwalacza (odpowiednik ciała procedury składowanej) -
czyli kod wykonywany przez wyzwalacz.
Poniżej podano przykład utworzenia prostego wyzwalacza (o
nazwie t_informacja), który jest wywoływany po wykonaniu
przez użytkownika polecenia INSERT na tabeli o nazwie
tabela1(tu konkretny przykład wysyłania e-maila do
administratora z informacją o wstawieniu nowych danych do
tabeli).
Tworzenie wyzwalaczy
Wyzwalacze tworzymy używając polecenia CREATE
TRIGGER.
Poniżej podano przykład utworzenia prostego wyzwalacza
typu AFTER (o nazwie t_informacja), który jest wywoływany
po wykonaniu przez użytkownika polecenia INSERT na
tabeli o nazwie tabela1(tu konkretny przykład wysyłania e-
maila do administratora z informacją o wstawieniu nowych
danych do tabeli).
Zastosowania wyzwalaczy
Wyzwalacze stosujemy wszędzie tam, gdzie w inny sposób nie da się
weryfikować integralności danych, a zwłaszcza ich zgodności z regułami logiki
biznesowej.
Na przykład, chcemy, by w pewnej kolumnie tabeli wstawiane były tylko wartości
unikalne, ale jednocześnie zezwalamy na wstawienie wartości NULL.
Jedynym rozwiązaniem jest użycie wyzwalacza, który sprawdzi, czy wstawiana
właśnie wartość już w danym polu wystąpiła, a jeżeli użytkownik wstawia wartość
NULL, to wyzwalacz mu na to pozwoli (tego efektu nie można osiągnąć innymi
metodami - np. używając indeksów, ustawiając właściwość unikalności kolumny
lub używając kryteriów sprawdzających dane wstawiane w kolumnę).
Drugie zastosowanie to wszelkiego typu automatyzacja zadań administracyjnych
w bazie danych (wszelkiego rodzaju "przypominacze", obsługa nietypowych
działań czy chociażby wysyłanie wiadomości przez e-mail lub pager).
Wreszcie z uwagi na pewne cechy wyzwalacze pozwalają na określony typ
przetwarzania transakcyjnego.
Transakcyjność wyzwalaczy
Instrukcje wykonywane w ciele wyzwalacza są traktowane
jako fragment transakcji jawnie lub niejawnie rozpoczętej
przez użytkownika.
Oznacza to, że za pomocą wyzwalacza można zatwierdzić
(COMMIT TRAN) lub odrzucić (ROLLBACK TRAN) zmiany
w tabeli wprowadzone przez użytkownika.
MS SQL Server wprowadza dwie tabele (o nazwach inserted
oraz deleted) przechowujące zmienione lub usunięte przez
użytkownika wartości.
Z tabel tych mogą korzystać wyzwalacze. Dzięki temu
można za pomocą wyzwalaczy cofnąć wykonanie przez
użytkownika zmiany w tabeli.
Rodzaje wyzwalaczy
Wyzwalacze wykonywane są automatycznie
przez serwer w odpowiedzi na akcję użytkownika
(wykonanie jednego z poleceń języka SQL
modyfikujących dane w tabeli).
Wyróżniamy dwa rodzaje wyzwalaczy:
•wyzwalacze typu "po" (ang. AFTER),
•wyzwalacze tpyu "zamiast" (ang. INSTEAD OF).
Wyzwalacze typu "po"
Jak sama nazwa wyzwalaczy sugeruje, są one wykonywane
po wykonaniu określonego polecenia. W definicji
wyzwalacza typu "po" przy liście poleceń język SQL, na które
wyzwalacz ma reagować, pojawia się słowo kluczowe
AFTER.
Z uwagi na to, że wyzwalacze typu "po" nie ingerują w
wykonanie polecenia języka SQL, możemy dla jednej tabeli i
jednego polecenia SQL (np. dla INSERT) zdefiniować więcej
niż jeden wyzwalacz tego typu.
Kolejność wykonywania wyzwalaczy ustala się przy pomocy
odpowiedniej systemowej procedury składowanej (w MS
SQL Server jest to procedura sp_settriggerorder).
Wyzwalacze typu "zamiast"
Dla każdej akcji (dla każdego polecenia modyfikującego
dane) w tabeli możemy zdefiniować jeden wyzwalacz typu
"zamiast".
Wyzwalacze tego typu są wykonywane, jak wskazuje nazwa,
zamiast określonego polecenia SQL.
W definicji wyzwalaczy tego typu, przy liście poleceń języka
SQL, na które wyzwalacz ma reagować, pojawia się słowo
kluczowe INSTEAD OF.
Podsumowanie
Czym są wyzwalacze i kiedy je stosujemy
Wyzwalacze są szczególnym rodzajem procedur
składowanych.
W przeciwieństwie do zwykłych procedur są wykonywane
automatycznie jako reakcja na wykonanie określonych
poleceń SQL i nie mogą być wywołane jawnie przez
użytkownika.
Rodzaje wyzwalaczy
Laboratorium
Planowanie i tworzenie wyzwalaczy
wyzwalacz typu ZAMIAST
wyzwalacz typu PO