Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Gespeicherte Prozeduren und Trigger » Prozeduren, Trigger und Batches verwenden

 

Einführung in Trigger

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.

Hinweis

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].

Berechtigungen für das Ausführen von Triggern

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:

Triggertypen

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-Ereignisse

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-Zeitpunkt

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