Ein Trigger ist eine spezielle Form der gespeicherten Prozedur, die automatisch ausgeführt wird, sobald eine datenverändernde Anweisung ausgeführt wird. Trigger werden verwendet, wenn die referenzielle Integrität und andere deklarative Integritätsregeln nicht ausreichen. Weitere Hinweise finden Sie unter Datenintegrität gewährleisten und CREATE TABLE-Anweisung.
Es kann sinnvoll sein, eine komplexere Form der referenziellen Integrität mit detaillierteren Prüfungen zu erzwingen, oder die Prüfung von neuen Daten, gleichzeitig aber Altdaten die Möglichkeit zu geben, Integritätsregeln zu verletzen. Eine andere Form des Einsatzes von Triggern ist das Protokollieren der Aktivität in Datenbanktabellen, unabhängig von den Anwendungen, die die Datenbank benutzen.
Es gibt drei spezielle Anweisungen, nach denen Trigger nicht ausgelöst werden: LOAD TABLE, TRUNCATE und WRITETEXT. Siehe LOAD TABLE-Anweisung, TRUNCATE-Anweisung und WRITETEXT-Anweisung [T-SQL].
Trigger werden mit den Berechtigungen des Eigentümers der zugehörigen Tabelle oder Ansicht ausgeführt, und nicht mit den Berechtigungen des Benutzers, dessen Maßnahmen das Auslösen des Triggers bewirkt haben. Ein Trigger kann Zeilen in einer Tabelle modifizieren, die ein Benutzer nicht direkt modifizieren konnte.
Sie können verhindern, dass Trigger ausgelöst werden, indem Sie die Serveroption -gf angeben oder die Option fire_triggers setzen. Weitere Hinweise finden Sie unter:
SQL Anywhere unterstützt folgende Triggertypen:
BEFORE-Trigger Ein BEFORE-Trigger wird ausgelöst, bevor eine auslösende Aktion ausgeführt wird. BEFORE-Trigger können für Tabellen definiert werden, nicht aber für Ansichten.
AFTER-Trigger Ein AFTER-Trigger wird ausgelöst, nachdem eine auslösende Aktion ausgeführt wurde. AFTER-Trigger können für Tabellen definiert werden, nicht aber für Ansichten.
INSTEAD OF-Trigger Ein INSTEAD OF-Trigger ist ein bedingter Trigger, der anstelle eines auslösenden Vorgangs ausgelöst wird. INSTEAD OF-Trigger können für Tabellen und Ansichten definiert werden (außer für materialisierte Ansichten). Weitere Hinweise finden Sie unter INSTEAD OF-Trigger.
Eine vollständige Beschreibung der Syntax zum Definieren eines Triggers finden Sie unter CREATE TRIGGER-Anweisung.
Trigger können für eine oder mehrere auslösende Ereignisse definiert werden:
Maßnahme | Beschreibung |
---|---|
INSERT | Der Trigger wird aufgerufen, wenn eine neue Zeile in die Tabelle eingefügt wird, die dem Trigger zugeordnet ist. |
DELETE | Der Trigger wird aufgerufen, wenn eine Zeile der zugeordneten Tabelle gelöscht wird. |
UPDATE | Der Trigger wird aufgerufen, wenn eine Zeile der zugeordneten Tabelle aktualisiert wird. |
UPDATE OF Spaltenliste | Der Trigger wird aufgerufen, wenn eine Zeile der zugeordneten Tabelle so aktualisiert wird, dass eine Spalte in der Spaltenliste geändert wird. |
Sie können unterschiedliche Trigger für jedes zu behandelnde Ereignis schreiben. Wenn Sie einige gemeinsame Aktionen und von einem Ereignis abhängige Aktionen verwenden, können Sie auch einen Trigger für alle Ereignisse erstellen und eine IF-Anweisung zur Unterscheidung der einzelnen durchgeführten Aktionen einsetzen Weitere Hinweise finden Sie unter Bedingungen für den Triggervorgang.
Trigger können entweder auf Zeilenebene oder auf Anweisungsebene aufgerufen werden:
Ein Trigger auf Zeilenebene wird einmal für jede Zeile ausgelöst, die sich ändert. Trigger auf Zeilenebene werden ausgeführt, BEVOR oder NACHDEM die Zeile geändert wurde.
Spaltenwerte für das neue und alte Abbild der betroffenen Zeile werden dem Trigger über Variablen zur Verfügung gestellt.
Ein Trigger auf Anweisungsebene wird ausgelöst, nachdem die komplette, Trigger-auslösende Anweisung abgeschlossen ist. Die Zeilen, die von der Trigger-Anweisung betroffen sind, werden dem Trigger über die temporären Tabellen zur Verfügung gestellt, welche die neuen und alten Abbilder der Zeilen darstellen. SQL Anywhere unterstützt keine BEFORE-Trigger auf der Anweisungsebene .
Die Flexibilität bei der Ausführungszeit des Triggers ist bei Triggern sinnvoll, die sich auf Aktionen der referenziellen Integrität verlassen, wie kaskadierendes Aktualisieren oder Löschen.
Wenn ein Fehler auftritt, während ein Trigger ausgeführt wird, schlägt der Vorgang fehl, der den Trigger ausgelöst hat. INSERT, UPDATE und DELETE sind atomare Vorgänge. Wenn sie fehlschlagen, werden alle Veränderungen der Anweisung (einschließlich der Wirkungen von Triggern und Prozeduren, die von Triggern aufgerufen wurden) zurückgesetzt, sodass wieder das Stadium vor dem Vorgang hergestellt wird. Weitere Hinweise finden Sie unter Atomare zusammengesetzte Anweisungen.
Trigger erstellen
Trigger ausführen
Trigger ändern
Trigger löschen
Berechtigungen für das Ausführen von Triggern
Erweiterte Informationen zu Triggern
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |