|
|||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||
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:
Główne cechy wyzwalaczy to:
edytuj Wyzwalacze w OracleOpró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
edytuj Wyzwalacze w Microsoft SQL ServerMicrosoft 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:
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 PostgreSQLW PostgreSQL wyzwalacze są dostępne od 1997 roku. Następujące cechy SQL:2003 nie są zaimplementowane w PostgreSQL:
Składnia:
CREATE TRIGGER nazwa { BEFORE | AFTER } { zdarzenie [ OR ... ] }
ON tabela [ FOR [ EACH ] { ROW | STATEMENT } ]
EXECUTE PROCEDURE nazwafunkcji ( argumenty )
edytuj Wyzwalacze w MySQLObsł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 FirebirdFirebird 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ń:
edytuj Linki zewnętrzne |
| All Right Reserved © 2007, Designed by Stylish Blog. |