Syntax
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;
/
Parametre
- [OR REPLACE] - ak existuje trigger s menom <table_name> a uživateľ má na to práva, tak predefinuje tento trigger
- <tigger_name> - jednoznačné meno triggera
- (BEFORE|AFTER|INSTEAD OF) -typ triggera,
- BEFORE -trigger sa spustí pred vykonaním operácie (INSERT|DELETE|UPDATE)
- AFTER -trigger sa spustí po vykonaní operácie (INSERT|DELETE|UPDATE)
- INSTEAD OF -trigger sa spustí na miesto vykonania operácie (INSERT|DELETE|UPDATE) (čo znamená, že môžete napríklad urobiť trigger nad VIEWom, ktorý sa postará o nainsertovanie dát do príslušných tabuliek z ktorých je VIEW zložený)
- (INSERT|DELETE|UPDATE) -trigger bude reagovat na zvolenú operáciu alebo operácie
- [OF <trigger_column_list> ] -pri UPDATE operáciii môžeme uviesť zoznam stĺpcov, na zmenu ktorých má zareagovať trigger
- <trigger_column_list> -zoznam stĺpcom, na ktorých zmenu bude reagovať trigger
- <table_name> - meno tabuľky (v ORACLE aj VIEW viď vyššie) nad, ktoru bude bežať trigger
- [REFERENCING OLD [AS] <old_name> NEW [AS] <new_name>] - nastavenie aliasov pre starú a novú hodnotu
- <old_name> - alias pre starú hodnotu
- <new_name> - alias pre novú hodnotu
- [FOR EACH ROW] - táto klauzula hovorí, či sa trigger má vykonať zvlášť pre každý riadok, alebo iba raz
- [WHEN ( <condition> )] - kľúčové slovo WHEN nám umožňuje špecifikovať za akých podmienok sa vykoná trigger
- <condition> - obmedenie pre trigger, podmienka, ktorá hovorí kedy sa uplatní trigger
- <SQL_statement> - SQL príkazy, ktoré sa majú vykonať pri triggery (INSERT,UPDATE,DELETE)
Popis
Príkaz jazyka SQL
Príkaz CREATE TRIGGER slúži k vytvoreniu databázového triggera. Databázový trigger je sada uložených príkazov, ktoré sú zaviazané na určitú tabuľku.
Pre vytváranie triggerov sa môžu databázové systémy rozchádzat. Je to spôsobené tým, že trigger je definovaný v štandarde SQL3 z roku 1999. (Jedná sa o nový štandard, ktorý by mal postupne nahradiť štandard SQL92.) Je možné, že niektoré databázové systémy v súčasnej dobe ani neumožnujú vytvárať a používať triggre. Aké typy triggrov máme? Môžeme mat trigger, ktorý sa vykoná, ak nejakú hodnotu v stlpci budeme pridávat - INSERT, modifikovat - UPDATE alebo mazat - DELETE. Pri všetkých týchto troch akciách môžeme v niektorých systémoch špecifikovat, či sa trigger má vyvolat pred vlastným príkazom alebo až po vlastnom príkaze - pojmy before triggery a after triggery. Kompletná syntax vytvorenia jednoduchého triggra vyzerá nasledovne (tak, ako je definovaná v štandarde SQL3):
CREATE TRIGGER meno_triggra
ON meno_tabulky
FOR akcia
AS sql_príkaz_na_vyvolanie
MENO_TRIGGRA je reťazec charakterizujúci názov objektu v rámci celej databázy, v MENO_TABULKY je uvedený názov tabuľky, v ktorej sa akcia udeje, pozorovaná tabuľka, AKCIA je akcia na tabuľke, pri ktorej sa má trigger aktivovať, tj. DELETE, UPDATE, alebo INSERT. V prípade akcie UPDATE sa uvádza ešte zátvorka, do ktorej sa zadá meno sledovaného stĺpca, napr. FOR UPDATE(plat). Za kľúčovým slovom AS nasleduje SQL príkaz na vyvolanie, väčšinou je to príkaz DELETE alebo UDPATE. Dôležité je, že sa trigger aplikuje len na aktuálny riadok, s ktorým v akcii pracujeme. Niektoré databázové systémy umožňujú trigger aplikovať aj na všetky riadky v tabuľke - FOR EACH ROW.
CREATE TRIGGER meno_triggra Udalosť Akcia
Udalosť je práve jeden z výrazov:
1. INSERT ON tabuľka [REFFERENCING NEW AS meno]
2. DELETE ON tabuľka [REFFERENCING OLD AS meno]
3. UPDATE ON stĺpec,... ON tabuľka [REFFERNCING [NEW AS meno1][OLD AS meno2] ]
Udalosť určuje pri akej operácií a na akej tabuľke (u UPDATE na ktorom stĺpci) budú realizované nasledujúce akcie. Príkaz REFFERENCING umožnuje definovať nové meno pre tabuľku pred (OLD) alebo po (NEW) realizovaní tejto operácie. Tieto mena možno použiť iba v akcii FOR EACH ROW.
Akcie môžu byť v tomto poradí:
BEFORE podmienené príkazy
FOR EACH ROW podmienené príkazy
AFTER podmienené príkazy
a určujú aké príkazy a kedy sa budú realizovať. Akcie sú nepovinné v prípade, že bolo použité REFFERENCING, vtedy je povinná akcia FOR EACH ROW.
Príklad 1
Ak by sme v tabulke PLATY chceli aicky odstránit záznam pracovníka, ktorého záznam v tabulke LUDIA mažeme, tak bude trigger vyzerat nasledovne:
CREATE TRIGGER aktualizuj_platy
ON ludia
FOR DELETE
AS DELETE
FROM platy
WHERE platy.osoba_id = ludia.id
Keď potom v databázovom systéme dôjde k zmazaniu zamestnanca číslo 12 v tabuľke LUDIA, bude aicky zmazaný záznam v tabuľke PLATY pre osobu číslo 12.
Vezmime si opačný príklad. Do našej firmy nastúpi nový zamestnanec, my pre neho založíme nový záznam v tabuľke LUDIA a budeme chcieť, aby sa aicky vytvoril záznam v tabulke PLATY s hodnotou nejakej minimálnej mzdy, napr. 4000.
Príklad 2
Uveďme si len pre ilustráciu zložitejší trigger, ktorý bude plniť nasledovné úlohy: ak dôjde k zmene platov pracovníkov, tak tým, ktorí majú nový plat vyšší ako 30000 Sk, tak im čiastku strhneme na 28000 Sk, a tí čo by po zmene platu mali menej ako 12000 Sk, tak im dáme plat 15000 Sk.
CREATE TRIGGER uprav_platy
BEFORE
UPDATE OF plat
ON people
FOR EACH ROW
BEGIN
IF (:new.plat>30000) THEN :new.plat:=28000; END IF;
IF (:new.plat<12000) THEN :new.plat:=15000; END IF;
END;
Pozri aj
DROP TRIGGER, CREATE TRIGGER v Oracle
zdroj: http://www.nextream.sk/stano/dbs/trig.html#vytv , http://www.kvp.szm.sk/oracle/oracle2.html