DB2 10.5 for Linux, UNIX and Windows

Trigger

Ein Trigger definiert eine Reihe von Aktionen, die in Reaktion auf eine Einfüge-, Aktualisierungs- oder Löschoperation für eine angegebene Tabelle ausgeführt werden. Wenn eine solche SQL-Operation ausgeführt wird, wird der Trigger als aktiviert bezeichnet. Trigger sind optional und werden mithilfe der Anweisung CREATE TRIGGER definiert.

Trigger können zusammen mit referenziellen Integritätsbedingungen und Prüfungen auf Integritätsbedingungen in Tabellen zur Implementierung von Datenintegritätsregeln eingesetzt werden. Darüber hinaus können Trigger auch genutzt werden, um Aktualisierungen an anderen Tabellen zu bewirken, automatisch Werte für eingefügte oder aktualisierte Zeilen zu generieren bzw. umzuwandeln oder Funktion für solche Operationen wie das Absetzen von Alerts aufzurufen.

Trigger bilden einen nützlichen Mechanismus zur Definition und Implementierung von Übergangsregeln für den Geschäftsbetrieb, bei denen es sich um Regeln handelt, die für verschiedene Status der Daten gelten (z. B. ein Gehalt, dass nicht um mehr als zehn Prozent angehoben werden kann).

Mithilfe von Triggern lässt sich die Logik, durch die Geschäftsregeln implementiert werden, außerhalb der Datenbank verwalten. Das heißt, dass nicht die Anwendungen für die Implementierung dieser Regeln zuständig sind. Eine zentralisierte Logik, die für alle Tabellen implementiert wird, ermöglicht eine einfachere Pflege, da keine Änderungen an Anwendungsprogrammen erforderlich werden, wenn sich die Logik ändert.

Zur Erstellung eines Triggers sind folgende Angaben erforderlich:

Die Anweisung, welche die Aktivierung eines Triggers bewirkt, enthält eine Gruppe der betroffenen Zeilen. Dies sind die Zeilen der Subjekttabelle, die eingefügt, aktualisiert oder gelöscht werden. Die Triggergranularität gibt an, ob die Aktionen des Triggers einmal für die Anweisung oder einmal für jede der betroffenen Zeilen ausgeführt werden.

Die ausgelöste Aktion besteht aus einer optionalen Suchbedingung und einer Gruppe von Anweisungen, die ausgeführt werden, wenn der Trigger aktiviert wird. Die Anweisungen werden nur ausgeführt, wenn die Suchbedingung ein wahres Ergebnis liefert. Wenn die Aktivierungszeit des Triggers vor dem Trigger-Ereignis liegt, können die ausgelösten Aktionen Anweisungen umfassen, mit denen Auswahlen getroffen, Übergangsvariablen festgelegt oder SQL-Status signalisiert werden können. Liegt die Aktivierungszeit des Triggers nach dem Trigger-Ereignis, können die ausgelösten Aktionen Anweisungen umfassen, die auswählen (SELECT), aktualisieren (UPDATE), löschen (DELETE) oder SQL-Status signalisieren.

Die ausgelöste Aktion kann sich mithilfe von Übergangsvariablen auf die Werte in der Gruppe der betroffenen Zeilen beziehen. Übergangsvariablen verwenden die Namen der Spalten in der Subjekttabelle, die durch einen angegebenen Namen qualifiziert werden, der zu erkennen gibt, ob es sich um einen Verweis auf den alten Wert (vor der Aktualisierung) oder den neuen Wert (nach der Aktualisierung) handelt. Der neue Wert kann mithilfe der Anweisung 'SET Variable' in BEFORE-, INSERT und UPDATE-Triggern ebenfalls geändert werden.

Eine weitere Methode zur Bezugnahme auf die Werte in der Gruppe der betroffenen Zeilen besteht in der Verwendung von Übergangstabellen. Übergangstabellen können ebenfalls die Namen von Spalten in der Subjekttabelle verwenden, stellen jedoch einen Namen bereit, über den die gesamte Gruppe der betroffenen Zeilen wie eine Tabelle behandelt werden kann. Übergangstabellen können nur in AFTER-Triggern (d. h., nicht mit BEFORE- und INSTEAD OF-Triggern) verwendet werden, wobei für alte und neue Werte getrennte Übergangstabellen definiert werden können.

Es können mehrere Trigger angegeben werden, um Tabellen, Ereignisse (INSERT, UPDATE, DELETE) oder Aktivierungszeiten (BEFORE, AFTER, INSTEAD OF) zu kombinieren. Wenn mehr als ein Trigger für eine bestimmte Tabelle, ein bestimmtes Ereignis und eine bestimmte Aktivierungszeit vorhanden ist, entspricht die Reihenfolge, in der die Trigger aktiviert werden, der Reihenfolge, in der sie erstellt werden. Das heißt, der zuletzt erstellte Trigger wird auch zuletzt aktiviert.

Die Aktivierung eines Triggers kann unter Umständen zu einem Hintereinanderschalten von Triggern führen. Diese Bezeichnung bezieht sich auf das Ergebnis der Aktivierung eines Triggers, der Anweisungen ausführt, die wiederum die Aktivierung anderer Trigger oder sogar die erneute Aktivierung desselben Triggers bewirken. Die ausgelösten Aktionen können außerdem Aktualisierungen bewirken, die sich aus der Anwendung von Regeln der referenziellen Integrität für Löschungen ergeben, die wiederum die Aktivierung weiterer Trigger nach sich ziehen können. Durch die Hintereinanderschaltung von Triggern kann eine Kette von Triggern und Löschregeln der referenziellen Integrität aktiviert werden, die einen erheblichen Umfang an Änderungen an der Datenbank als Folge einer einzigen INSERT-, UPDATE- oder DELETE-Anweisung bewirken.

Wenn mehrere Trigger Einfüge-, Aktualisierungs- oder Löschaktionen für dasselbe Objekt enthalten, werden zur Lösung von Zugriffskonflikten Konfliktlösungsmechanismen wie z. B. temporäre Tabellen verwendet. Dies kann sich merklich auf die Leistung auswirken, insbesondere in Umgebungen mit partitionierten Datenbanken.