Oracle: Trigger

Aus Wikibooks

Wechseln zu: Navigation, Suche
Wikibooks buchseite.svg Zurück zu " Package " | One wikibook.svg Hoch zu " Inhaltsverzeichnis " | Wikibooks buchseite.svg Vor zu " Sequenzen "



[Bearbeiten] Was ist und macht ein Trigger

Trigger sind eventgesteuerte Prozeduren, die automatisch bei bestimmten Ereignissen durchgeführt werden.

Es gibt 3 Auslöser

  • INSERT
  • UPDATE
  • DELETE

Zusätzlich kann noch der Ausführungszeitpunkt bestimmt werden

  • BEFORE - vor der Änderung
  • AFTER - nach der Änderung

Seit Oracle 9i können Trigger für folgende weitere Ereignisse definiert werden:

  • DDL-Statements: CREATE, ALTER, DROP
  • An- und Abmeldungen: LOGON, LOGOFF
  • Start/Stop der Datenbank: STARTUP, SHUTDOWN
  • Bei Systemfehler: SERVERERROR

Ein weiteres Kriterium ist wie oft der Trigger gestartet werden soll

  • ROW-Trigger: for each row
werden pro geänderter Zeile ausgeführt
Anwendungsbeispiel: Protokollierung, Überprüfung von Aktionen, ...
  • Statement-Trigger: for each statement
werden pro ausgeführtem Statement ausgeführt, egal wieviele Zeilen betroffen sind
Anwendungsbeispiel: Zugriffsschutz, ...

[Bearbeiten] Syntax eines Triggers

create or replace trigger <triggername>
before/after insert or update or delete
on <tablename> 
for each row/for each statement
REFERENCING NEW AS <newROW> OLD AS <oldROW>
when (<Bedingung>)
DECLARE
   variablen deklaration
BEGIN
   if INSERTING then
    ...
   end if;
   if UPDATING then
    ...
   end if;
   if DELETING then
    ...
   end if;
EXCEPTION
   Fehlerbehandlung
END <triggername>;

Nur in ROW-Triggern werden die Alten (old) und Neuen (new) Werte der Tabelle zur Verfügung gestellt

Syntax bei Bedingungen: new.spaltenname, old.spaltenname

Syntax bei Aktionen: :new.spaltenname, :old.spaltenname

Bei BEFORE-Triggern besteht die Möglichkeit die NEW-Werte zu ändern


Katalogtabelle zu Triggern

select * from user_triggers;


Weitere Infos: http://www.psoug.org/reference/instead_of_trigger.html

Persönliche Werkzeuge