zeilenorientierter Trigger

Zeilenorientierte Trigger können für DML-Ereignisse (INSERT, UPDATE, DELETE?) definiert werden. Gegenüber befehlsorientierten Triggern wird bei den sog. ROW-Triggern der CREATE TRIGGER-Befehl mit der FOR EACH ROW-Klausel programmiert.

Sie werden für jeden manipulierten Datensatz ausgeführt. Wird eine DML-Anweisung ausgeführt, die zum Beispiel 5 Datensätze betreffen, dann wird ein ROW-Trigger auch 5-mal ausgeführt, für jeden betroffenen Datensatz einmal. Ist kein Datensatz von der DML-Anweisung betroffen, wird auch kein zeilenorientierter Trigger ausgeführt.

Eine Besonderheit ist die Verfügbarkeit von Transitionsvariablen, eine andere die Zulässigkeit der WHEN-Klausel (vgl. Trigger), deren Bedingung erfüllt sein muss, damit der Trigger auch ausgeführt wird.

Beispiele:

Hier ein Trigger für die Pflege redundanter Daten.
Ein zeilenorientierter Trigger, der automatisch die Spalte Bestand in der Teile-Tabelle anpasst, wenn sich der Bestand in der Tabelle Lagerbestand ändert.

  CREATE OR REPLACE TRIGGER Tei1e_UPDATE
  AFTER UPDATE OF Bestand ON Lagerbestand
  FOR EACH ROW
  BEGIN
    UPDATE Teile
    SET    Bestand =:NEW.Bestand-:OLD.Bestand + BESTAND
    WHERE  TNr =:NEW.TNr;
  END;

Quellen:

  • Faeskorn-Woyke, Heide; Bertelsmeier, Birgit; Riemer, Petra; Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, München, 2007, ISBN 978-3-8273-7266-6
  • Feuerstein, Steven, Pribyl. Bill: "Oracle PL/SQL Programming", O'Reilly, 2009, ISBN-13: 978-0596514464
  • Oracle® Database SQL Language Reference 11g Release 1 (11.1) in http://docs.oracle.com/cd/B28359_01/server.111/b28286/toc.htm
  • Oracle® Database PL/SQL Language Reference 11g Release 2 (11.2) in http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/toc.htm
  • Saurabh, Gupta: "Oracle Advanced PL/SQL Developer Professional Guide", Packt Publishing Limited, 2012, ISBN 978-1-84968-722-5

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