WYZWALACZE
Definiowanie wyzwalaczy Cele Wyjaśnić cel istnienia wyzwalaczy Przedyskutować zalety wyzwalaczy Wymienić i opisać cztery typy wyzwalaczy wspieranych przez Adaptive Server Anywhere Opisać dwa typy czasu wykonania wspierane przez Adaptive Server Anywhere Opisać strukturę wyzwalacza Stworzyć wyzwalacz 11b - 2
MAPA MODUŁU Wyzwalacze UŜywanie Wyzwalaczy Implementacja Wyzwalaczy 11b - 3
Definicja Wyzwalacza (Triggers) Procedura wyzwalana (ang. triggers) to procedura przechowywana w bazie danych, która zostaje uruchomiona na skutek jakiegoś zdarzenia. Kod po stronie serwera, który zapewnia integralność danych Zbudowany z poleceń SQL a i poleceń sterujących przetwarzaniem Są zatwierdzane i cofane razem z inicjującą transakcją Dziedziczą uprawnienia twórcy tabeli 11b - 4
MAPA MODUŁU Wyzwalacze UŜywanie Wyzwalaczy Implementacja Wyzwalaczy 11b - 5
UŜywanie Wyzwalaczy UŜywa się wyzwalaczy do zapewnienia Integralności danych przy warunkach zbyt złoŝonych dla DDL Zapisania reguł biznesowych i logiki powiązań między danymi Do automatycznego numerowania wierszy 11b - 6
Zapewnienie Integralności Wyzwalacze uzupełniają Powiązania między tabelami Wartości domyślne Warunek NOT NULL Warunek CHECK Klucze główne 11b - 7
Zalety Wyzwalaczy NiezaleŜne od aplikacji klienckiej Zapewnia standaryzacje Jedna centralna lokalizacja reguł Wydajność Kod prekompilowany Bezpieczeństwo UŜytkownicy i aplikacje nie mogą ich ominąć 11b - 8
Typy Wyzwalaczy Wyzwalacze są uruchamiane w wyniku wystąpienia zdarzenia: Insert kiedy wstawiany jest nowy wiersz Delete kiedy usuwany jest wiersz Update Gdy dowolna kolumna jest uaktualniona Update na kolumnie Gdy konkretna kolumna jest uaktualniona MoŜna wywołać wyzwalacz dla wszystkich zdarzeń i uŝyć klauzuli IF dla określenia akcji (przykład dalej) 11b - 9
Poziom wierszy Zakres i Czas Wyzwalacza Przed lub po kaŝdym wierszu Poziom zapytania Po całej operacji 11b - 10
MAPA MODUŁU Wyzwalacze UŜywanie Wyzwalaczy Implementacja Wyzwalaczy 11b - 11
Tworzenie Wyzwalaczy Składa się z polecenia ograniczającego Te same funkcje i moŝliwości co w procedurach Wyzwalacze nie mogą jednak mieć parametrów ani zwracać wartości Składnia CREATE TRIGGER trigger-name trigger-time trigger-event [, trigger-event,...] [ ORDER integer ] [ON table-name [ REFERENCING [ OLD AS old-name ] [ NEW AS new-name ] ] [ FOR EACH { ROW STATEMENT } ] [ WHEN ( search-condition ) ] BEGIN END 11b - 12
Wymaga uprawnień Tworzenie Wyzwalaczy RESOURCE ALTER na tabeli 11b - 13
Trigger time Dla wyzwalaczy na poziomie polecenia tylko AFTER Dla wyzwalaczy na poziomie wiersza BEFORE oraz AFTER Wyzwalacz BEFORE UPDATE jest odpalany, kiedy wykonywane jest polecenie INSERT na wierszu przy czym nie jest waŝne czy nowa wartość róŝni się od starej Wyzwalacz AFTER UPDATE jest odpalany tylko wówczas jeśli nowa wartość róŝni się od starej 11b - 14
Klauzula REFERENCING Klauzula REFERENCING pozwala odwoływać się do wstawianych, zmienianych lub kasowanych wierszy Znaczenie zmiennych NEW i OLD zaleŝy od poziomu wyzwalacza Dla wyzwalaczy na poziomie polecenia REFERENCING OLD i NEW są aliasami tabeli odpowiednio przed i po poleceniu Dla wyzwalaczy na poziomie wiersza REFERENCING OLD i NEW pozwalają odwoływać się do wiersza przed i po zdarzeniu 11b - 15
Klauzula REFERENCING Znaczenie OLD i NEW jest róŝne dla róŝnych zdarzeń INSERT REFERENCING NEW pozwala odwoływać się do wstawianego wiersza, nie występuje REFERENCING OLD DELETE - REFERENCING OLD reprezentuje usuwany wiersz, nie występuje REFERENCING NEW UPDATE - REFERENCING OLD reprezentuje wiersz przez zmianami, REFERENCING NEW reprezentuje wiersz po zmianach 11b - 16
Klauzula WHEN Tylko dla wyzwalaczy na poziomie wierszy Wyzwalacz jest uruchamiany tylko dla wierszy, które spełniają warunek search-condition 11b - 17
Wyzwalacz INSERT Przykład Zabrania dodawania nowych pracowników, którzy zostali zwolnieni. CREATE TRIGGER ai_employee AFTER INSERT ON employee REFERENCING NEW AS new_emp FOR EACH ROW BEGIN IF new_emp.termination_date IS NOT NULL THEN RAISERROR 30000 'You cannot hire an employee you have already fired'; END IF; END 11b - 18
Wyzwalacz DELETE Przykład Zabrania usuwania pracowników, którzy nie zostali zwolnieni CREATE TRIGGER d_employee BEFORE DELETE ON employee REFERENCING OLD AS cur_emp FOR EACH ROW BEGIN IF cur_emp.termination_date IS NULL THEN RAISERROR 30001 'You cannot delete an employee who has not been fired'; END END IF; 11b - 19
Wyzwalacz UPDATE Przykład Pozwala wyłącznie na zwiększanie płac. CREATE TRIGGER bu_employee BEFORE UPDATE ON employee REFERENCING NEW AS after_update OLD AS before_update FOR EACH ROW BEGIN IF after_update.salary < before_update.salary THEN RAISERROR 30002 'You cannot decrease a salary'; END IF; END 11b - 20
Wyzwalacz Kolumn UPDATE Przykład Pozwala wyłącznie na zwiększanie płac, ale reaguje na kolumnę płacy CREATE TRIGGER ub_empsal BEFORE UPDATE OF salary ON employee REFERENCING NEW AS after_update OLD AS before_update FOR EACH ROW BEGIN IF after_update.salary < before_update.salary THEN RAISERROR 30002 'You cannot decrease a salary'; END IF; END 11b - 21
Wiele Wyzwalaczy Przykład PoniŜszy kod tworzy wyzwalacz, który zostanie uruchomiony przed poleceniem wstawienia lub modyfikacji CREATE TRIGGER iub_employee BEFORE INSERT, UPDATE ON employee REFERENCING NEW AS new_row FOR EACH ROW BEGIN END SET new_row.last_updated = CURRENT TIMESTAMP; 11b - 22
Wiele Wyzwalaczy CREATE TRIGGER tr BEFORE INSERT, UPDATE, DELETE ON sample_table REFERENCING OLD AS t1old FOR EACH ROW BEGIN DECLARE msg varchar(255); SET msg = This trigger was fired by an ; IF INSERTING THEN SET msg = msg insert ELSEIF DELETING THEN set msg = msg delete ELSEIF UPDATING THEN set msg = msg update END IF; MESSAGE msg TO CLIENT END 11b - 23
Usuwanie Wyzwalaczy Składnia DROP TRIGGER trigger-name Przykład DROP TRIGGER mytrigger Wymaga uprawnienia ALTER 11b - 24
Gdy Wyzwalacz jest Uruchamiany Automatycznie na podstawie akcji wykonywanych przez aplikacje Kolejność operacji: Wyzwalacze BEFORE Akcje powiązań kluczy obcych Operacja Wyzwalacze AFTER 11b - 25
Podsumowanie Wyzwalacz zawiera polecenia SQL i polecenia sterowania. Wykonywane automatyczne. Wyzwalacze słuŝą do zapewniania złoŝonych reguł integralności danych. Wyzwalacze oferują: standaryzacje, wydajność i bezpieczeństwo. 11b - 26
Podsumowanie Są cztery typy wyzwalaczy: insert, delete, update i kolumn update. Wyzwalacze na poziomie wierszy wykonują się przed lub po modyfikacji kaŝdego wiersza. Wyzwalacze na poziomie polecenia przed lub po całym poleceniu. Wyzwalacze tworzy się przez CREATE TRIGGER. Usuwa się przez DROP TRIGGER. Do obu rzeczy trzeba odpowiednich uprawnień. 11b - 27
Cele Laboratorium 11-2: UŜywanie Wyzwalaczy Po zakończeniu laboratorium będziesz mógł stworzyć wyzwalacz testowy. Opis Stwórz wyzwalacz testowy, który zabrania zmniejszania płacy pracownikom. 11b - 28
Pytania Podsumowujące 1. Do czego słuŝą wyzwalacze? 2. Wymień i opisz cztery typy wyzwalaczy wspieranych przez Adaptive Server Anywhere. 3. Jakie dwa tryby czasowe są wspierane przez Adaptive Server Anywhere? 4. Jakie uprawnienia są potrzebne do stworzenia wyzwalacza? 11b - 29