Oracle: Trigger
Aus Wikibooks
[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