Befehlsorientierter Trigger

Befehlsorientierte Trigger (Synonym: STATEMENT-Trigger) können für DML-Ereignisse (INSERT, UPDATE, DELETE?) definiert werden. Gegenüber zeilenorientierten Triggern wird bei den befehlsorientierten Triggern der CREATE TRIGGER-Befehl in SQL-2003 mit der FOR EACH STATMENT-Klausel programmiert und bei Oracle ohne eine FOR EACH-Klausel, da der STATEMENT-Trigger 'default' ist.

Sie werden für jede DML-Anweisung genau einmal ausgeführt, unabhängig davon, ob überhaupt und wie viele Datensätze von dieser Manipulation betroffen sind.

Transitionsvariablen sind nicht verfügbar, ebenso nicht die WHEN-Klausel.

Beispiel:

Hier ein Trigger für die Kontrolle des Gehaltsbudgets. Und zwar ein befehlsorientierter Trigger, der automatisch für jeden INSERT bzw. UPDATE auf die Spalte Gehalt prüft, ob das Budget von 100.000.000 noch nicht überschritten ist. Dies hier ist auch ein Beispiel für einen Triggerabbruch im Fehlerfall mit der Konsequenz, dass die Ausführung der feuernden DML-Anweisung ebenfalls abgebrochen und rückgängig gemacht wird.

  CREATE OR REPLACE TRIGGER budget_check
  AFTER INSERT OR UPDATE OF gehalt ON mitarbeiter
  DECLARE
    v_summe    NUMER(24,2);
  BEGIN
    SELECT SUM(gehalt) INTO v_summe
    FROM   mitarbeiter;
    IF v_summe > 100000000 THEN
      RAISE_APPLICATION_ERROR (-20001,'Fehler: Gehaltsbudget überschritten! Summe ist:  '||v_summe);
    END IF;
  END;


siehe auch: Trigger

Quellen:

  • ANSI/ISO/IEC 9075-1:2003. Part 1 "SQL/Framework", ISO International Organization for Standardization / ANSI American National Standards Institute, September 2003
  • ANSI/ISO/IEC 9075-2:2003. Part 2 "SQL/Foundation", ISO International Organization for Standardization / ANSI American National Standards Institute, Dezember 2003
  • Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, München, 2002, ISBN 3-8273-7021-3
  • Melton, Jim/Simon, Alan R.: "SQL: 1999 - Understanding Relational Language Components", Morgan Kaufmann, San Francisco, 2001, ISBN 1558604561
  • Oracle® Database SQL Language Reference 11g Release 2 (11.2), E17118-03, August 2010, http://download.oracle.com/docs/cd/E11882_01/server.112/e17118.pdf
  • Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2

Kategorie: Aktive Datenbanken, SQL, Oracle-PL-SQL, B