Ein schwierig zu verstehender Aspekt bei Triggern ist die Reihenfolge, in der Trigger ausgelöst werden, wenn ein auslösender Vorgang Auswirkungen auf mehrere Trigger hat. Ob konkurrierende Trigger ausgelöst werden und in welcher Reihenfolge sie ausgelöst werden, hängt von zwei Dingen ab: Triggertyp (BEFORE, INSTEAD OF oder AFTER) und Triggerbereich (Zeilen- oder Anweisungsebene).
Mit UPDATE-Anweisungen können Spaltenwerte in mehr als einer Tabelle geändert werden. Die Sequenz der Trigger-Auslösung ist für jede Tabelle gleich, aber die Reihenfolge, in der die Tabellen aktualisiert werden, ist nicht garantiert.
Für Trigger auf Zeilenebene gilt: BEFORE-Trigger werden vor INSTEAD OF-Triggern ausgelöst, die wiederum vor AFTER-Triggern ausgelöst werden. Alle Trigger auf Zeilenebene für eine bestimmte Zeile werden vor den Triggern für die Folgezeile ausgelöst.
Bei Triggern auf Anweisungsebene werden INSTEAD OF-Trigger vor AFTER-Triggern ausgelöst. BEFORE-Trigger auf Anweisungsebene werden nicht unterstützt.
Wenn es konkurrierende AFTER-Trigger auf Anweisungs- und Zeilenebene gibt, werden die AFTER-Trigger auf Anweisungsebene ausgelöst, nachdem alle Trigger auf Zeilenebene beendet wurden.
Wenn es konkurrierende INSTEAD OF-Trigger auf Anweisungs- und Zeilenebene gibt, werden die Trigger der Zeilenebene nicht ausgelöst.
Die für den AFTER STATEMENT-Trigger erstellten temporären Tabellen haben dasselbe Schema wie die Basistabelle, mit denselben Spaltennamen und Datentypen. Diese Tabellen enthalten jedoch keine Primärschlüssel, Fremdschlüssel oder Indizes. Die Reihenfolge der Zeilen in den temporären Tabellen ist nicht garantiert und stimmt möglicherweise nicht mit der Reihenfolge überein, in der die Zeilen der Basistabelle ursprünglich aktualisiert wurden.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |