prev up next

Trigger

Die allgemeinste Konsistenzsicherung geschieht durch einen Trigger. Dies ist eine benutzerdefinierte Prozedur, die automatisch bei Erfüllung einer bestimmten Bedingung vom DBMS gestartet wird. Hilfreich sind zwei vom System gefüllte Tabellen DELETED und INSERTED, in der solche Zeilen gespeichert sind, auf die sich das beabsichtigte Löschen bzw. Einfügen beziehen. In diesem Zusammenhang ist die Operation UPDATE als hintereinander ausgeführte Kombination von Löschen und Einfügen zu sehen.

Listing 8.2 zeigt einen AFTER-UPDATE-Trigger für die Tabelle Professoren, der nach jedem Update aufgerufen wird und im Falle einer Degradierung diese wieder rückgängig macht.

Listing 8.2: Trigger zur Korrektur einer Degradierung

Listing 8.3 zeigt die Lösung für dasselbe Problem durch einen INSTEAD-OF-UPDATE-Trigger, der statt des Update durchgeführt wird. Durch Vergleich der Einträge in den Systemtabellen DELETED und INSERTED kann die beabsichtigte Beförderung für solche Professoren durchgeführt werden, die zuvor noch keine Rangangabe aufwiesen oder eine kleinere Rangangabe hatten.

Listing 8.3: Trigger zur Verhinderung einer Degradierung

Listing 8.4 zeigt einen AFTER-INSERT-Trigger, der immer nach dem Einfügen eines Tupels in die Tabelle hoeren einen Professor sucht, der jetzt mehr als 10 Hörer hat und ihn dann nach C4 befördert.

Listing 8.4: Trigger zum Auslösen einer Beförderung

Listings 8.5 und 8.6 zeigen die Verwendung eines INSTEAD-OF-INSERT-Triggers im Zusammenhang mit Sichten, in die nur unter sehr eingeschränkten Bedingungen eingefügt werden kann. Auf der Tabelle Person sei eine Sicht Geburtstagsliste gegeben. In dieser Sicht wird das momentane Lebensalter in Jahren anhand der Systemzeit und des gespeicherten Geburtsdatums errechnet. Natürlich ist diese Sicht nicht update-fähig bei Einfügen eines Namens mit Lebensalter. Durch den Trigger geburtstag läßt sich das Einfügen trotzdem erreichen, da nach Umrechnung des Alters in ein Geburtsdatum ein Tupel in die Tabelle Person eingefügt werden kann.

Listing 8.5: Nichtupdatefähige Sicht

Listing 8.6: Trigger zum Einfügen eines errechneten Geburtsdatums

Das Schlüsselwort drop entfernt einen Trigger: drop trigger Geburtstag


prev up next