Wikipedia · einfach zusammengefasst · Stand
Datenbanktrigger
Ein Datenbanktrigger, in der Informatik meist nur Trigger genannt (englisch für Auslöser), ist eine Funktion diverser Datenbankmanagementsysteme, insbesondere …
Inhalt5 Abschnitte
Grundidee und Zweck
Ein Datenbanktrigger (meist kurz Trigger, englisch „Auslöser“) ist eine Funktion verschiedener Datenbankmanagementsysteme, besonders großer relationaler Datenbankmanagementsysteme (RDBMS). Er ist ein gespeichertes Programm, das bei bestimmten Änderungen von Daten in einer Tabelle automatisch aufgerufen wird.
Als auslösende Ereignisse kommen bei SQL insbesondere INSERT (Einfügen), UPDATE (Ändern) und DELETE (Löschen) vor. Der Trigger kann die Änderung erlauben oder verhindern und zusätzlich weitere Tätigkeiten ausführen. Damit lassen sich Regeln direkt in der Datenbank umsetzen.
Ausführung und Einsatzbereiche
Trigger dienen unter anderem der Datenkonsistenz, also Integritätsüberprüfungen, sowie dem Einfügen, Löschen oder Ändern von Referenzdaten. Sie werden entweder vor der Änderung an der referenzierten Tabelle oder danach ausgeführt; man sagt auch, der Trigger wird „gefeuert“.
Es muss festgelegt werden, ob ein Trigger für jeden veränderten Datensatz oder nur einmal pro Anweisungsaufruf läuft. Verändert eine UPDATE-Anweisung beispielsweise 100 Sätze, wird ein zeilenbezogener Trigger 100-mal aktiviert. Ein anweisungsbezogener Trigger wird dagegen nur einmal aktiviert.
Da ein Trigger selbst Datensätze einfügen, ändern oder löschen kann, kann seine Ausführung weitere Trigger auslösen. Dadurch können ganze Verarbeitungsketten entstehen.
Triggerarten und Programmiersprachen
Neben SQL-Standard-Triggern, die vor oder nach dem auslösenden Ereignis ausgeführt werden, gibt es INSTEAD OF-Trigger. Diese werden anstelle des auslösenden Ereignisses ausgeführt. Sie werden von Oracle, IBM DB 2, Microsoft SQL Server und PostgreSQL angeboten, gehören jedoch nicht zum SQL-Standard. INSTEAD OF-Trigger können auch für eine View (Sicht) definiert werden.
Zur Erstellung verwenden RDBMS eingebaute prozedurale Programmiersprachen, zum Beispiel PL/pgSQL bei PostgreSQL, PL/SQL bei Oracle und SQL PL bei IBM DB2. In einigen RDBMS können Trigger auch Stored Procedures aufrufen. Dadurch kann ein Programm in einer anderen Sprache wie C, COBOL oder Java aufgerufen werden. Bei den genannten RDBMS sind Trigger sowohl auf Tabellen als auch auf Sichten möglich.
Aufbau eines PL/SQL-Triggers
Die PL/SQL-Syntax beginnt mit CREATE [OR REPLACE] TRIGGER <trigger_name>. Danach wird festgelegt, ob der Trigger BEFORE, AFTER oder INSTEAD OF ausgeführt wird und ob INSERT, DELETE oder UPDATE [OF <feld_name>] ihn auslöst.
Mit ON <table_name> wird die zugehörige Tabelle angegeben. REFERENCING kann Namen für NEW und OLD festlegen: NEW steht für den neuen Datensatz, OLD für den bisherigen Datensatz. FOR EACH ROW macht den Trigger zeilenbezogen. Eine optionale WHEN-Bedingung bestimmt, bei welchen Änderungen der Triggerkörper ausgeführt wird.
Beispiel: Schutz vor zu niedrigem Gehalt und Gehaltskürzung
Der Trigger mitarbeiter_trig_gehalt_biu wird BEFORE INSERT OR UPDATE OF gehalt ON mitarbeiter und mit FOR EACH ROW ausgeführt. Seine WHEN-Bedingung lautet new.gehalt <= 5000 or new.gehalt < old.gehalt. In dieser WHEN-Klausel erfolgt der Zugriff auf old und new ohne Doppelpunkt.
Der Trigger ermittelt mit einem Cursor aus der Tabelle mitarbeiter zu :NEW.MITARBEITERNR den Namen und Vornamen des Mitarbeiters. Ist :NEW.GEHALT kleiner oder gleich 5000, löst er mit RAISE_APPLICATION_ERROR die Ausnahme -20901 aus: „Managergehalt für Mitarbeiter ... zu klein!“. Ist :NEW.GEHALT kleiner als :OLD.GEHALT, löst er die Ausnahme -20902 aus: „Gehaltskürzung für Mitarbeiter ... nicht erlaubt!“.
Die Fehler werden in der Regel an die Anwendung weitergereicht. Ausnahme-Nummern von -20000 bis -29999 können selbst definiert werden.