Transitionsvariable

Transitionsvariablen und -tabelle in SQL2003:

Um auf den alten bzw. neuen Zustand des akutell manipulierten Datensatzes bzw. der aktuell manipulierten Tabelle zugreifen zu können, stehen in SQL2003 die sog. Transitionsvariablen und -tabellen zur Verfügung.

Die Transitionstabellen (OLD.Tabellenname, NEW.Tabellenname) beinhalten während der Triggerausführung den alten und den neuen Zustand der Tabelle, für die der TRIGGER definiert ist. Um auf den neuen oder alten Wert eines Attributs des manipulierten Datensatzes zugreifen zu können, wird dem Attributnamen das Schlüsselwort NEW bzw. OLD in Punktnotation vorangestellt (OLD.Spaltenname, NEW.Spaltenname).

In befehlsorientierten Triggern stehen nur die Transitionstabellen zur Verfügung, in den zeilenorientierten Triggern hingegen sowohl die Transitionstabellen wie auch die Variablen. Für BEFORE TRIGGER gilt die zusätzliche Restriktion, dass keine Transitionstabellen verfügbar sind. Die Begründung für diese letzte Einschränkung ergibt sich aus dem Ausführungsmodell. Liegt ein UPDATE-Ereignis vor, so sind die OLD wie auch die NEW-Variablen und -Tabellen mit den zugehörigen alten/neuen Werten gefüllt. Beim DELETE-Ereignis sind nur die OLD-Variablen und -Tabellen belegt. Beim INSERT sind es nur die NEW-Variablen und -Tabellen.

Der Geltungsbereich der Transitionsvariablen und -tabellen sind die Trigger, die für das zugehörige Ereignis gefeuert wurden. In der Referenzklausel (vgl. TRIGGER) besteht nun die Möglichkeit die Schlüsselwörter OLD bzw. NEW [ROW] sowie OLD und NEW TABLE umzubenennen in selbst gewählte Bezeichnungen, die Zeilenalias_alter/neuer_Wert und Tabellenalias_ alter/neuer_Wert.

Transitionsvariablen bei Oracle:

Bei Oracle gibt es keine Transitionstabellen, nur die Variablen. Alle übrigen Aussagen gelten analog. Da es sich aus der Perspektive von PL/SQL bei den Transitionsvariablen um Host-Variablen handelt, werden sie im Aktionsteil mit vorangegestellten Doppelpunkt geschrieben, wie z.B. :OLD.Spaltenname, :NEW.Spaltenname. Hingegen handelt es sich in der WHEN-Bedingung um SQL-Code und somit werden die Varialben dort ohne ":" geschrieben, nur OLD.Spaltenname, NEW.Spaltenname.

siehe auch Datenbanktrigger, TRIGGER

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, Oracle-PL-SQL, T