![]() |
Comelio GmbH
|
Comelio-Blog > Oracle > Trigger Trigger
Oracle: TriggerNach der Erstellung von Routinen und Funktionen für die Datenverarbeitung, die Sie in den vorangegangenen Abschnitten kennen gelernt haben, beenden wir die Darstellung der PL/SQL-Module mit dem Bereich der Trigger (Auslöser). Sie ermöglichen das Abfangen von unerwünschten Ereignissen oder Zuständen in der Datenbank, indem sie durch ein vorher genau spezifiziertes Ereignis ausgelöst werden. Dieses Ereignis wird als „triggering event“ bezeichnet und mit solch schönen Wendungen wie „triggern“ für „auslösen“ beschrieben. Trigger ähneln den bereits beschriebenen Modulen, weisen aber gleichzeitig große Unterschiede zu Funktionen und Prozeduren auf. Trigger werden ebenfalls direkt in der Datenbank gespeichert und stellen damit ein Schema-Objekt der Datenbank dar. Es ist zusätzlich nicht einmal möglich, sie als lokales Modul in einem anderen Block zu schreiben, um sozusagen einen lokalen Trigger zu verwenden Sie warten ausschließlich auf Ereignisse, die in Form von SQL-Schlüsselwörtern, die das Ereignis beschreiben, ausgedrückt werden. Dabei ist es nicht möglich, zusätzlich Argumente zu übergeben. Es folgt zunächst eine Darstellung der verschiedenen Triggertypen, die Sie für verschiedene Einsatzbereiche erstellen können und für die immer eine leicht variierende Syntax bzw. zusätzliche Schlüsselwörter gelten und einsetzbar sind. Danach lernen Sie die Syntax für jeden einzelnen Typ kennen. Grundkonzeption der TriggerTrigger stellen aufgrund einer speziellen Definitionssyntax und ihrer Eigenschaften, die sie von anderen Modulen unterscheiden, sowie ihren gänzlich anderen Einsatzbereichen einen PL/SQL-Bereich dar, der verschiedene, klar umrissene Eigenschaften besitzt. TypologieIn der Datenbanktheorie wird für gewöhnlich, wenn von Triggern die Rede ist, auf die ungewollte Situation Bezug genommen, dass eine Datenbankaktion einen unerwünschten Zustand in Hinblick auf die Integrität der Daten zur Folge hat. Dies stellt nicht nur einen grundlegenden Einsatzbereich dar, sondern ist auch natürlich auch durch einen Trigger-Typ abgebildet worden. Dies ist in jedem Fall der so genannte DML-Trigger, es kann an dieser Stelle aber auch ein Instead-of-Trigger zum Einsatz kommen. Oracle geht mit seinem Trigger-Konzept über diese klassische Forderung hinaus und bietet zusätzlich noch einen System-Trigger an, der auch für andere Ereignisse als datenbezogene Ereignisse, nämlich für Ereignisse definiert werden kann, die auf Schema-Objekte ausgerichtet sind.
Wie in der Abbildung dargestellt ist, unterscheidet man drei Trigger-Typen, wobei dies nicht nur theoretisch oder in ihrer Anwendung fixiert werden kann, sondern auch durch jeweils unterschiedliche Syntaxregeln:
EinsatzbereicheWie in der Vorstellung der drei Trigger-Typen vermutlich schon deutlich geworden ist, ist die Verhinderung von Inkonsistenz und Verlust der Datenintegrität innerhalb der Datenbank ein entscheidender Einsatzbereich der Trigger-Technik. Einfache Integritätsregeln lassen sich in SQL z. B. über die CHECK-Bedingung vorgeben. Auch die Definition von Datentypen und Wertebereichen sowie die referenzielle Integrität (also die Definition von Primär- und Fremdschlüsseln bei der Tabellendefinition) ist bereits als Technik und Methode anzusehen, um Integritätsregeln abzubilden. Bei der Umsetzung von komplexen Regeln (so genannten Geschäftsregeln) jedoch lässt der SQL-Standardsprachschatz den Datenbank-Entwickler im Stich, sodass hier ein wichtiger und großer Einsatzbereich von Triggern liegt. Neben den Standardmöglichkeiten von Oracle, um Überwachungsinformationen von Benutzern und ihren Aktivitäten in der Datenbank und mit den Daten zu speichern, bietet sich die Möglichkeit, solche Überwachungswerkzeuge selbst zu entwickeln, wenn es um einfachere Aufgaben und für weniger anspruchsvolle Situationen geht. Dies bedeutet, dass bei Datenmanipulationen oder Arbeiten an den Eigenschaften von Schema-Objekten sowie bei grundsätzlichen Systembenutzungen automatisch Protokollinformationen in geeigneten Tabellen erfasst werden, die in diesem Fall selbst entwickelt werden. Da Trigger durch ihre Grundkonzeption ereignisgesteuert sind, bietet sich mit ihrem Einsatz die Möglichkeit, durch die Reaktion auf definierte Ereignisse andere Routinen automatisch – also per Aufruf – zu starten. Dies ermöglicht eine umfassende Automatisierung der Datenbank, wobei die entsprechenden Trigger nur für die Signalisierung von Änderungen und den Aufruf von anderen Routinen zum Einsatz kommen. In diesem Zusammenhang ist von Bedeutung, dass natürlich auch Routinen in C++ oder in Java durch eine CALL-Anweisung aufgerufen werden können, sodass man bei der Automatisierung nicht auf PL/SQL beschränkt ist.
|
||