Trigger

 
ca de en es fr it nl no pl pt ru ro fi sv tr vo


 

Ten artykuł dotyczy Informatyki. Zobacz też: układ wyzwalania w oscyloskopie.

Wyzwalacz (ang. trigger) jest to procedura wykonywana automatycznie jako reakcja na pewne zdarzenia w tabeli bazy danych. Wyzwalacze mogą ograniczać dostęp do pewnych danych, rejestrować zmiany danych lub nadzorować modyfikacje danych.

Bazy danych posiadające wyzwalacze: Microsoft SQL Server, PostgreSQL, Sybase, Oracle, Firebird, SQLite, InterBase SQL, MySQL (od wersji 5.0.2)

Standard języka SQL zdefiniował wyzwalacze dość późno, bo dopiero od wersji 99. Z tego powodu różne systemy bazodanowe opracowały własną składnię tworzenia wyzwalaczy. Dość blisko standardu jest Oracle oraz Firebird, natomiast system bazodanowy Microsoftu używa składni w wielu miejscach różniącej się od wytycznych.

Istnieje kilka typów wyzwalaczy. Wyzwalacze BEFORE - wykonywane przed instrukcją generującą zdarzenie. Wyzwalacze AFTER są wykonane po instrukcji generującej zdarzenie. W niektórych bazach danych są również wyzwalacze INSTEAD OF - są one wykonywane zamiast instrukcji generującej zdarzenie.

Istnieją trzy typowe zdarzenia powodujące wykonanie wyzwalaczy:

  • dopisanie nowego rekordu do bazy danych w wyniku wykonania instrukcji INSERT,
  • zmiana zawartości rekordu w wyniku wykonania instrukcji UPDATE oraz
  • usunięcie rekordu w wyniku wykonania instrukcji DELETE.

Główne cechy wyzwalaczy to:

  • nie mogą mieć parametrów (ale mogą zapisywać dane w tabelach tymczasowych)
  • nie mogą zatwierdzać transakcji (COMMIT) ani ich wycofywać (ROLLBACK) ponieważ działają w kontekście instrukcji [SQL#DML|SQL], która spowodowała ich uruchomienie
  • mogą generować dodatkowe błędy, jeżeli są źle napisane.

Spis treści

edytuj Wyzwalacze w Oracle

Oprócz wyzwalaczy wykonywanych gdy dane są modyfikowane, Oracle 9i udostępnia wyzwalacze wykonywane gdy struktura bazy (struktura tabeli) jest modyfikowana oraz gdy użytkownik łączy się lub rozłącza z bazą danych. Ten typ wyzwalaczy nazywany jest "wyzwalaczami metadanych" (ang. schema-level triggers).

Wyzwalacze metadanych

  • After Creation
  • Before Alter
  • After Alter
  • Before Drop
  • After Drop
  • Before Logoff
  • After Logon

edytuj Wyzwalacze w Microsoft SQL Server

Microsoft SQL Server udostępnia wyzwalacze wykonywane zarówno po, jak i zamiast instrukcji INSERT, UPDATE lub DELETE.

Microsoft SQL Server udostępnia wyzwalacze dla tabel oraz perspektyw (widoków), z tym, że w przypadku perspektyw można się stosować tylko przez wyzwalacz INSTEAD OF.

W Microsoft SQL Server 2005 wprowadzono wyzwalacze DDL, które są wykonywane w reakcji na bardzo szeroki zakres zdarzeń, takich jak:

  • DROP TABLE,
  • CREATE TABLE,
  • ALTER TABLE,
  • łączenie bądź rozłączanie się użytkownika z bazą danych.

W witrynie MSDN dostępna jest pełna lista tych zdarzeń.

Wyzwalacze wykonują swoje działania korzystając z dostępu do tymczasowych tabel Inserted i Deleted. Jest to opisane na w witrynie MSDN na stronie Using Inserted and Deleted tables.

edytuj Wyzwalacze w PostgreSQL

W PostgreSQL wyzwalacze są dostępne od 1997 roku. Następujące cechy SQL:2003 nie są zaimplementowane w PostgreSQL:

  • SQL pozwala wykonywać wyzwalacze w wyniku aktualizowania wskazanych kolumn; PostgreSQL nie daje takiej możliwości.
  • Standard pozwala na wykonanie przez wyzwalacz instrukcji SQL innych niż SELECT, INSERT, UPDATE - takich jak CREATE TABLE.

Składnia:

 CREATE TRIGGER nazwa { BEFORE | AFTER } { zdarzenie [ OR ... ] }
   ON tabela [ FOR [ EACH ] { ROW | STATEMENT } ]
   EXECUTE PROCEDURE nazwafunkcji ( argumenty )

edytuj Wyzwalacze w MySQL

Obsługa wyzwalaczy została wprowadzona w MySQL 5.0. Obsługiwane są wyzwalacze dla instrukcji INSERT, UPDATE i DELETE.

Standard SQL:2003 umożliwia w wyzwalaczach dostęp do zmiennych rekordowych przy użyciu składni takiej jak REFERENCING NEW AS n. Na przykład jeżeli wyzwalacz monitoruje zmiany w kolumnie pensja to odpowiedni wyzwalacz może zostać zapisany następująco:

 CREATE TRIGGER pensja_trigger
    BEFORE UPDATE ON pracownicy_table
    REFERENCING NEW ROW AS n, OLD ROW AS o
    FOR EACH ROW
    IF n.pensja <> o.pensja THEN
       --wykonaj odpowiednie działania;
    END IF;

edytuj Wyzwalacze w Firebird

Firebird obsługuje wszystkie podstawowe typy wyzwalaczy: BEFORE INSERT, AFTER INSERT, BEFORE UPDATE, AFTER UPDATE, BEFORE DELETE, AFTER DELETE.

W Firebird 1.5 wprowadzone zostały wyzwalacze wieloakcyjne (ang. multi-action triggers). Pozwalają one wykonać ten sam wyzwalacz w wyniku zajścia jednego z kilku zdarzeń.

Przykład wyzwalacza:

 CREATE TRIGGER ZmianaStanu
   FOR TABLE StanyTowarow
   AFTER INSERT OR UPDATE OR DELETE
 AS
 BEGIN
   /* działania wyzwalacza */
 END

W Firebird 2.1 wyzwalacze mogą być również wykonywane w wyniku jednego z następujących zdarzeń:

  • CONNECT - użytkownik połączył się z bazą danych,
  • DISCONNECT - użytkownik rozłączył się z bazą danych,
  • TRANSACTION START - transakcja została rozpoczęta,
  • TRANSACTION COMMIT - transakcja została zatwierdzona,
  • TRANSACTION ROLLBACK - transakcja została wycofana.

edytuj Linki zewnętrzne

All Right Reserved © 2007, Designed by Stylish Blog.