Triggery v ORACLE


Možnosť definovania TRIGGEROV prináša až štandard SQL3(schválený 1999). Avšak už dlhú dobu môžeme triggery v DB používať(DB2, ORACLE, INFORMIX, SYBASE). Každá databáza prichádza zo svojím riešením, ktoré sa medzi sebou navzájom trochu líšia. Líšia sa, tým čo umožňujú ale i syntaxou.

Triggery sú akési podprogramy, ktoré vieme zadefinovať pomocou SQL. Spúšťajú sa pri databázových operácia INSERT, UPDATE, DELETE. V triggeroch môžeme povedať čo sa má udiať pred, po alebo namiesto zvolenej operácie.
DB ORACLE má k prijatému štandardu najbližšie. (Narozdiel od JOINOv).

Syntax

V DB ORACLE môžete používať BEFORE, AFTER a INSTEAD OF triggery.
Vytvorenie triggera (CREATE TRIGGER)
CREATE [OR REPLACE] TRIGER <tigger_name>
(BEFORE|AFTER|INSTEAD OF) (INSERT|DELETE|UPDATE) [OF <trigger_column_list> ]
 ON <table_name>
[REFERENCING OLD [AS] <old_name> NEW [AS] <new_name>]
[FOR EACH ROW]
[WHEN ( <condition> )]
BEGIN
 <SQL_statement>
END

Zmazanie triggera (DROP TRIGGER)
Na zmazanie triggera slúži príkaz
DROP TRIGGER <tigger_name>


Aktivácia/deaktivácia triggera
Na aktiváciu/deaktiváciu triggera slúžia príkazy:
ALTER TRIGGER <tigger_name> ENABLE;
-aktivácia triggera <tigger_name>
ALTER TRIGGER <tigger_name> DISABLE;
-deaktivácia triggera <tigger_name>
ALTER TABLE <table_name> DISABLE ALL TRIGGERS;
-deaktivácia všetkých triggerov, ktoré sa viažu k tabuľke <table_name>
Príklady
Nasledujúci trigger zmení pole fullname z tabuľky AUTHUSER vždy keď sa zmení pole plnemeno v tabuľke ZTOSOBA
ORACLE:
CREATE TRIGGER FullNameU
AFTER UPDATE OF PlneMeno
ON ZTOsoba
REFERENCING NEW AS Zmena
FOR EACH ROW
UPDATE AUTHUser SET FullName = Zmena.PlneMeno WHERE id = Zmena.id
DB2 od IBM:
CREATE TRIGGER FullNameU
AFTER UPDATE OF PlneMeno
ON ZTOsoba
REFERENCING NEW AS Zmena
FOR EACH ROW MODE DB2SQL
UPDATE AUTHUser SET FullName = Zmena.PlneMeno WHERE id = Zmena.id
Vidíme, že syntax sa u týchto databáz veľmi nelíši, a že oba firmy sledovali vývoj štandardu SQL. Avšak DB2 nevie používať napr: kľúčové slovo INSTEAD OF.