Notatki
Pokaz slajdów
Konspekt
1
Rozdział 13
Procedury wyzwalane
  • procedury wyzwalane, cel stosowania, typy wyzwalaczy, wyzwalacze na poleceniach DML i DDL, wyzwalacze typu INSTEAD OF, przykłady zastosowania, zarządzanie wyzwalaczami
2
Procedury wyzwalane
  • Procedura wyzwalana (ang. trigger) to program w języku PL/SQL (również Java lub C) który reaguje na zdarzenia zachodzące w bazie danych i wykonuje się po zajściu określonych warunków.


  • Typy procedur wyzwalanych:
    • BEFORE - uruchamiane przed wykonaniem polecenia INSERT, UPDATE, DELETE
    • AFTER - uruchamiane po wykonaniu polecenia INSERT, UPDATE, DELETE
    • INSTEAD OF – uruchamiane zamiast polecenia INSERT, UPDATE, DELETE
    • systemowe – uruchamiane po zajściu określonego zdarzenia w schemacie lub bazie danych
3
Cele stosowania procedur wyzwalanych
  • Zaawansowane śledzenie użytkowników
  • Ochrona przed nieprawidłowymi transakcjami
  • Wymuszanie więzów referencyjnych (albo więzów nie wspieranych przez deklaratywne więzy integralnościowe albo więzów między węzłami rozproszonej bazy danych)
  • Wymuszanie złożonych reguł biznesowych
  • Wymuszanie złożonych polityk bezpieczeństwa
  • Zapewnianie przezroczystego zapisu wydarzeń
  • Wypełnianie atrybutów wartościami domyślnymi
  • Modyfikacja złożonych perspektyw
  • Śledzenie wydarzeń systemowych
4
Definiowanie procedury wyzwalanej
  • INSTEAD OF: wyzwalacz może być zdefiniowany tylko na perspektywie
  • WHEN: wyzwalacz wykonuje się tylko dla tych krotek, dla których jest spełniony warunek
  • FOR EACH ROW: wyzwalacz wykonuje się dla każdej modyfikowanej krotki
5
Definiowanie procedury wyzwalanej cd.
  • Dla procedur wyzwalanych uruchamianych na skutek uaktualnienia krotek, możemy określić listę atrybutów relacji, których uaktualnienie uruchomi procedurę.




  • Ta sama procedura może być wrażliwa na kombinację instrukcji DML (tj. INSERT, UPDATE, DELETE). (niezgodne ze standardem)
6
Klauzula FOR EACH ROW i WHEN
    • w klauzuli  WHEN i ciele wyzwalacza FOR EACH ROW można uzyskać dostęp do starej i nowej wartości atrybutu
    • domyślnie stara i nowa wersja rekordu są dostępne przez nazwy OLD i NEW (w ciele wyzwalacza poprzedzane dwukropkiem), można to zmienić za pomocą klauzuli REFERENCING NEW AS n
    • dla instrukcji INSERT stara wartość jest pusta, dla instrukcji DELETE nowa wartość jest pusta
7
Przykład procedury wyzwalanej (1)
  • Poniższa procedura wyzwalana uruchamia się przed wstawieniem nowego pracownika i nadaje mu kolejny identyfikator pobierany z licznika (sekwencji)
8
Przykład procedury wyzwalanej (2)
  • Poniższa procedura sprawdza, czy płaca przyznana asystentowi nie przekracza widełek płacowych dla asystenta.
9
Przykład procedury wyzwalanej (3)
  • Procedura wpisuje do tabeli HISTORY datę utworzenia, typ i nazwę każdego obiektu tworzonego wewnątrz bieżącego schematu.
10
Procedura wyzwalana INSTEAD OF
  • Pozwala na zapewnianie modyfikowalności złożonych perspektyw.
11
Zarządzanie procedurami wyzwalanymi
    • Wszystkie procedury wyzwalane związane z daną relacją można zablokować (odblokować) pojedynczym poleceniem:



    • Każda procedura wyzwalana może być w jednym z dwóch stanów: odblokowania lub zablokowania. Do zablokowania (odblokowania) pojedynczej procedury wyzwalanej służy polecenie:


    • Do usunięcie wyzwalacza służy polecenie

12
Słownik bazy danych
  • Informacje o procedurach wyzwalanych użytkownika mieszczą się w perspektywie systemowej USER_TRIGGERS


  • Informacje o zależnościach można podejrzeć w perspektywie słownika bazy danych USER_DEPENDENCIES