Syntaxe popisu triggeru (SQL)

popis_triggeru ::= TRIGGER [schΘma.]jmΘno_triggeru [ BEFORE | AFTER ] akce ON jmΘno_tabulkyreference ] [ granularita ] [ WHEN ( podmφnka ) ] p°φkaz
akce ::= [ INSERT | DELETE | UPDATE [ OF sloupec { , sloupec }à ] ]
reference ::= REFERENCING { OLD [ ROW ] [ AS ] starß_°ßdka | NEW [ ROW ] [ AS ] novß_°ßdkagranularita ::= FOR EACH { ROW | STATEMENT }

JmΘno triggeru musφ b²t unikßtnφ v rßmci aplikace. JmΘno tabulky musφ oznaΦovat tabulku existujφcφ v rßmci stejnΘ aplikace a sloupce musφ b²t jmΘna vybran²ch sloupc∙ tΘto tabulky. Specifikace INSERT, DELETE nebo UPDATE °φkß, p°i jakΘ operaci s obsahem tabulky bude trigger spuÜt∞n. Jsou-li za UPDATE uvedena navφc jmΘna sloupc∙, bude spuÜt∞n pouze p°i operacφch modifikujφcφch prßv∞ tuto mno₧inu sloupc∙, nenφ-li seznam sloupc∙ uveden, trigger se spustφ p°i zm∞n∞ v kterΘmkoliv sloupci.

Identifikßtory starß °ßdka a novß °ßdka umo₧≥ujφ odvolßvat se v podmφnce a v p°φkazu na obsah databßzovΘho zßznamu p°ed a po provedenφ akce, kterß trigger spustila. Zßpis ve tvaru starß_°ßdka.sloupec resp. novß_°ßdka.sloupec oznaΦuje starou resp. novou hodnotu sloupce. Je-li uvedeno INSERT, nesmφ b²t uvedena starß °ßdka, je-li uvedeno DELETE, nesmφ b²t uvedena novß °ßdka, nebo¥ tyto pojmy nemajφ v t∞chto p°φpadech smysl. Identifikßtory starß °ßdka a novß °ßdka nesmφ b²t stejnΘ.

Specifikace FOR EACH ROW °φkß, ₧e trigger bude spuÜt∞n pro ka₧d² zm∞n∞n² °ßdek zvlßÜ¥. Specifikace FOR EACH STATEMENT °φkß, ₧e bude spuÜt∞n pouze jednou v rßmci provßd∞nφ celΘho SQL p°φkazu, p°i n∞m₧ se m∞nφ vφce °ßdk∙ najednou. Nenφ-li uvedeno jedno ani druhΘ, mφnφ se FOR EACH STATEMENT. Specifikace novΘ °ßdky a starΘ °ßdky je povolena pouze v p°φpad∞, ₧e je uvedeno FOR EACH ROW. Transientnφ tabulky trigger∙ (doΦasnΘ tabulky obsahujφcφ smazanΘ nebo vlo₧enΘ zßznamy) nejsou ve WinBase602 zatφm implementovßny, proto varianta trigger∙ FOR EACH STATEMENT nenφ p°φliÜ u₧iteΦnß - nelze p°eΦφst starΘ a novΘ hodnoty v m∞n∞n²ch °ßdcφch. V tΘto verzi je proto doporuΦovßno pou₧φt FOR EACH ROW v₧dy.

P°i spuÜt∞nφ triggeru se nejprve vyhodnotφ podmφnka, a je-li spln∞nß, provede se p°φkaz (jednoduch² nebo slo₧en²). V rßmci podmφnky ani p°φkazu nesmφ b²t proveden p°φkaz otevφrajφcφ nebo uzavφrajφcφ transakci.

BEFORE trigger p°i svΘm provßd∞nφ vidφ v tabulce p∙vodnφ verzi dat, zatφmco AFTER trigger vidφ ji₧ zm∞n∞nou verzi dat. Ostatnφ klienti vidφ zm∞ny (zp∙sobenΘ p°φkazem SQL nebo triggery) a₧ po uzav°enφ transakce.

P°φklad pou₧itφ:

trigger zajistφ, ₧e p°i vklßdßnφ zßznamu do tabulky Firmy bude sloupec nazev zapsßn velk²mi pφsmeny

TRIGGER VelkaPismena AFTER INSERT ON Firmy
REFERENCING NEW ROW AS novaradka
FOR EACH ROW
BEGIN
 SET novaradka.nazev=UPPER(novaradka.nazev);
END