Start
Unternehmen
Business Solutions
Business Intelligence
Software-Technologien
Technologie-Beratung
Individual-Software

Comelio GmbH
Essen
Fon: +49(0)201-437517-0
Fax: +49(0)201-437517-10
info@comelio.com

Comelio GmbH
Berlin
Fon: +49(0)30-3640339-80
Fax: +49(0)30-3640339-89
info@comelio.com

Comelio GmbH
Hamburg
Fon: +49(0)40-20934996-0
Fax: +49(0)40-20934996-9
info@comelio.com

Comelio GmbH
Frankfurt
Fon: +49(0)69-17320683-0
Fax: +49(0)69-17320683-9
info@comelio.com

Comelio GmbH
München
Fon: +49(0)89-38156860-0
Fax: +49(0)89-38156860-9
info@comelio.com

Comelio GmbH
Stuttgart
Fon: +49(0)711-46051275-0
Fax: +49(0)711-46051275-9
info@comelio.com

Comelio GmbH
Leipzig
Fon: +49(0)341-3928790-0
Fax: +49(0)341-3928790-9
info@comelio.com

Comelio GmbH
Köln
Fon: +49(0)221-355337943-0
Fax: +49(0)221-355337943-9
info@comelio.com

Comelio GmbH
Düsseldorf
Fon: +49(0)211-63556420-0
Fax: +49(0)211-63556420-9
info@comelio.com

Comelio-Blog > Oracle > Trigger

Trigger

Die Techniken der Datendefinitionssprache (DDL) von SQL lassen zwar neben der Definition von Primär- und Fremdschlüsselbeziehungen auch verschiedene Wertevalidierungen über CHECK-Bedingungen zu, doch nicht alle Bedingungen, die für die Beibehaltung eines konsistenten Datenbestandes notwendig sind, lassen sich unmittelbar bei der Definition der Strukturen abbilden. Mit Hilfe von Triggern können hier auch während der Arbeit mit Daten über die DML-Befehle von SQL weitere Überprüfungen, Wertumwandlungen und Anweisungen ausgeführt werden, die für die Pflege und Aufrechterhaltung der Datenkonsistenz von entscheidender Bedeutung sind. Dieser Artikel stellt die verschiedenen Trigger-Arten vor und beschreibt ihre Einsatzbereiche.

Kontakt

Anrede* Herr Frau
Vorname*
Nachname*
Firma
E-Mail*
Tel-Nr.
Bereich*
Freitext

Oracle: Trigger

Nach 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 Trigger

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

Typologie

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

Trigger-Typen und auslösende SQL-Befehle

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:

DML-Trigger
Anweisungen aus dem DML-Bereich von SQL wie INSERT, UPDATE oder DELETE lösen einen DML-Trigger aus. Dabei kann man bei der Programmierung des Triggers frei bestimmen, ob die Anweisungen im Anweisungsabschnitt des Triggers vor oder nach dem auslösenden Ereignis (vor oder nach dem Eintragen, Löschen, Aktualisieren also) ausgeführt werden sollen. Dabei wirken sich diese SQL-Befehle ausdrücklich direkt auf Tabellen aus.
Instead-of-Trigger
Wie schon für den DML-Trigger so gilt auch für den Instead-of-Trigger, dass DML-Operationen aus dem SQL-Sprachumfang als auslösende Ereignisse in Frage kommen. Als Besonderheit gilt hier, dass dieser Trigger-Typ ausschließlich für Sichten (entweder relationale oder Objekt-Sichten) definiert werden kann und anstelle der ursprünglich vorgegebenen Befehle ausgeführt wird. Diese Eigenschaft sowie die entsprechende PL/SQL-Klausel führte zu seiner Bezeichnung. Weil für das Ereignis nicht zusätzliche Anweisungen zur Ausführung kommen, sondern sie ersetzende, gibt es keine Angaben zur zeitlichen Reihenfolge des Trigger-Anweisungsblocks.
System-Trigger
Während die anderen beiden Trigger-Typen für die Daten und ihre Strukturen von Relevanz sind, ist der System-Trigger ein Werkzeug, um System-Ereignisse und DDL-Befehle abzufangen. Zu den System-Ereignissen gehören solche Ereignisse wie das Starten oder Herunterfahren der Datenbank, das An- und Abmelden von Benutzern sowie Fehler. Zu den DDL-Befehlen gehören die Befehle CREATE, ALTER und DROP aus dem SQL-Sprachumfang, die zur Erstellung oder Manipulation von Schema-Objekten vorhanden sind. Diese stellen natürlich spezielle Einträge in den Data Dictionary-Tabellen dar, können aber einfacher als über eine Abfrage dieser Tabellen direkt durch diesen Trigger-Typ abgefangen werden.

Einsatzbereiche

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

    Comelio GmbH Oracle: PL/SQL Datenbankprogrammierung Trigger Anleitung Java SQLJ Manual Tutorial Oracle XML Programmierung Datenbank-Entwicklung PL/SQL -Comelio GmbH Oracle: PL/SQL Datenbankprogrammierung Trigger Anleitung Java SQLJ Manual Tutorial Oracle XML Programmierung Datenbank-Entwicklung PL/SQL -Comelio GmbH Oracle: PL/SQL Datenbankprogrammierung Trigger Anleitung Java SQLJ Manual Tutorial Oracle XML Programmierung Datenbank-Entwicklung PL/SQL -Comelio GmbH Oracle: PL/SQL Datenbankprogrammierung Trigger Anleitung Java SQLJ Manual Tutorial Oracle XML Programmierung Datenbank-Entwicklung PL/SQL -Comelio GmbH Oracle: PL/SQL Datenbankprogrammierung Trigger Anleitung Java SQLJ Manual Tutorial Oracle XML Programmierung Datenbank-Entwicklung PL/SQL -Comelio GmbH Oracle: PL/SQL Datenbankprogrammierung Trigger Anleitung Java SQLJ Manual Tutorial Oracle XML Programmierung Datenbank-Entwicklung PL/SQL -Comelio GmbH Oracle: PL/SQL Datenbankprogrammierung Trigger Anleitung Java SQLJ Manual Tutorial Oracle XML Programmierung Datenbank-Entwicklung PL/SQL -Comelio GmbH Oracle: PL/SQL Datenbankprogrammierung Trigger Anleitung Java SQLJ Manual Tutorial Oracle XML Programmierung Datenbank-Entwicklung PL/SQL -Comelio GmbH Oracle: PL/SQL Datenbankprogrammierung Trigger Anleitung Java SQLJ Manual Tutorial Oracle XML Programmierung Datenbank-Entwicklung PL/SQL -