Procedury wyzwalane

Procedury wyzwalane używane są zwykle w celu wymuszenia reguł przetwarzania i integralności danych. Procedury wyzwalane definiowane są dla określonej tabeli, nazywanej tabelą procedur wyzwalanych.

Procedura wyzwalana uruchamiana automatycznie

W trakcie wstawiania, modyfikowania i usuwania danych w tabeli procedur wyzwalanych, gdy zdefiniowano procedury wyzwalane dla tych operacji, procedury te uruchamiane są automatycznie i nie mogą być ominięte, niezależnie od użytego interfejsu programowego aplikacji (API) i instrukcji języka Transact-SQL.

Procedura wyzwalana nie może być wywoływana bezpośrednio

W przeciwieństwie do standardowych systemowych procedur składowanych, procedury wyzwalane nie mogą być wywoływane bezpośrednio, a także nie przekazują i nie akceptują parametrów.

Procedura wyzwalana transakcją

Procedura wyzwalana i instrukcja, która ją uruchomiła traktowane są jako pojedyncza transakcja, która może być anulowana z wnętrza procedury wyzwalanej. Definicja procedury wyzwalanej zawierać może instrukcje ROLLBACK TRANSACTION, nawet jeśli instrukcja BEGIN TRANSACTION jawnie nie występuje. Instrukcja uruchamiająca procedurę wyzwalaną traktowana jest jako początek niejawnej transakcji, nazywanej także trybem autozatwierdzania, chyba że dodatkowo jawnie określono instrukcję BEGIN TRANSACTION. Jeśli procedura wyzwalana, zawierająca instrukcję ROLLBACK TRANSACTION, została uruchomiona z wnętrza transakcji zdefiniowanej przez użytkownika, to instrukcja ta anuluje całą transakcję. Jeśli procedura wyzwalana, zawierająca instrukcję ROLLBACK TRANSACTION uruchomiona została jako część pakietu, to instrukcja ta anuluje cały pakiet.


Podstawową zaletą procedur wyzwalanych jest to, że mogą one zawierać złożoną logikę przetwarzania, wykorzystującą instrukcje języka Transact-SQL. Właściwość ta może być użyta do wykorzystania zalet wielu właściwości procedur wyzwalanych.

Kaskadowe zmiany w powiązanych tabelach bazy danych

Przykładowo, procedura wyzwalana usuwania tabeli tytul bibliotecznej bazy danych może usuwać odpowiednie wiersze z innych tabel, w których numery tytułów są równe kasowanym wartościom nr_tytulu. Uzyskuje się to używając kolumny nr_tytulu kluczy zewnętrznych jako sposobu lokalizacji wierszy w tabelach wypozyczenia, pozycja i egzemplarz.

Wymuszenie bardziej złożonych reguł przetwarzania

W przeciwieństwie do ograniczenia CHECK, procedury wyzwalane mogą odwoływać się do kolumn innych tabel. Przykładowo, gdy czytelnik wypożycza książkę, do tabeli wypożyczenia wstawiany jest wiersz. Procedura wyzwalana wstawiania tej tabeli sprawdza, czy książkę tę można wypożyczyć, czy nie. Robi to przez sprawdzenie wartości w kolumnie do_wypożyczenia tabeli pozycja. Jeśli jest tam wartość N (nie), procedura wyzwalana anuluje wypożyczenie książki i zawiadamia bibliotekarza.

Obsługa zdenormalizowanych danych

Przykładowo, gdy książka jest wypożyczana, to do tabeli wypożyczenia wstawiany jest nowy wiersz. Procedura wyzwalana wstawiania tej tabeli aktualizuje kolumnę wypożyczona tabeli egzemplarz zmieniając wartość z nie na tak.

Porównanie stanu danych przed modyfikacją i po niej.

Procedury wyzwalane umożliwiają odwoływanie się do zmian danych, wywołanych przez instrukcje INSERT, UPDATE i DELETE.


Uwaga!

Ograniczenia, reguły poprawności i wartości domyślne mogą informować o błędach tylko przez standardowy system obsługi błędów. Jeśli aplikacja wymaga nietypowych komunikatów i bardziej złożonej obsługi błędów, należy użyć procedur wyzwalanych.

Specyfika wykorzystania procedur wyzwalanych.

Przy pracy z procedurami wyzwalanymi należy zwrócić uwagę na następujące fakty i zalecenia:


  • Procedury wyzwalane reagują; ograniczenia zapobiegają. Procedury wyzwalane uruchamiane są tylko wtedy, gdy na tabeli zostanie wykonana określona operacja.
  • Ograniczenia sprawdzane są w pierwszej kolejności. Jeśli w tabeli z procedurami wyzwalanymi zdefiniowano ograniczenia, to są one sprawdzane przed uruchomieniem procedur. Jeśli ograniczenie zostanie przekroczone, to procedura wyzwalana nie zostanie uruchomiona.
  • Tabele mogą mieć wiele procedur wyzwalanych. SQL Server pozwala umieszczać wiele procedur wyzwalanych w jednej tabeli. W tabeli można zdefiniować wiele procedur wyzwalanych dla każdej akcji, jak również jedną procedurę dla wszystkich trzech akcji.
  • Właściciel tabeli musi mieć prawo do realizacji wszystkich poleceń, zawartych w procedurach wyzwalanych. Tylko właściciel tabeli może tworzyć i usuwać procedury wyzwalane. Prawo to nie może być przekazywane. Dodatkowo, właściciel tabeli musi mieć prawo do realizacji wszystkich instrukcji zawartych w procedurze wyzwalanej, w stosunku do wszystkich wykorzystywanych tabel.
  • Procedur wyzwalanych nie można wiązać z tabelami tymczasowymi i widokami. Mogą się jednak do nich odwoływać.
  • Procedury wyzwalane nie powinny zawierać instrukcji SELECT. Procedury wyzwalane mogą zwykle zawierać te same instrukcje co procedury składowane. Podobnie jak one mogą zwracać zestaw wyników generowany przez zawartą w nich instrukcję SELECT. Umieszczanie instrukcji SELECT w procedurze wyzwalanej jest niewskazane, gdyż użytkownik nie może zobaczyć wyników w efekcie działania instrukcji UPDATE, INSERT i DELETE.


Jeśli w procedurze wyzwalanej FOR UPDATE użyto klauzuli IF UPDATE (nazwa_kolumny), to zareaguje ona tylko na zmiany wskazanej kolumny.


na górę Strona główna