Triggery definovanΘ v aplikaci lze spouÜt∞t i p°i interaktivnφ prßci s formulß°i vedoucφmi do dat, na n∞₧ byly triggery navr₧eny. P°i navrhovßnφ je t°eba uva₧ovat nßsledujφcφ odliÜnosti od trigger∙, spouÜt∞n²ch p°φmo SQL p°φkazem.
INSERT TRIGGER
Vlo₧enφ novΘho zßznamu ve formulß°i se chovß odliÜn∞ od vlo₧enφ zßznamu pomocφ SQL p°φkazu INSERT. Nejprve se vlo₧φ "fiktivnφ" zßznam, kter² mß vÜechny hodnoty NULL, po zapsßnφ hodnot se teprve provede kontrola integrity apod. INSERT trigger m∙₧e reagovat pouze AFTER a nem∙₧e odkazovat na ₧ßdnΘ hodnoty, proto₧e nejsou dosud vlo₧eny. M∙₧e ale vlo₧it do novΘho zßznamu n∞jakou (implicitnφ) hodnotu.
Po zapsßnφ hodnot do novΘho zßznamu se uplatnφ UPDATE trigger.
UPDATE TRIGGER
Chovßnφm UPDATE triggeru je obdobnΘ jako v SQL variant∞. Je nutnΘ pamatovat, ₧e formulß° se po provedenφ trigeru automaticky nep°ekreslφ.
P°φklad:
Po vlo₧enφ zßznamu se do sloupc∙, kterΘ nebyly vypln∞ny, dosadφ implicitnφ hodnoty
TRIGGER jedna AFTER INSERT ON Tab2
REFERENCING NEW ROW AS novaradka
FOR EACH ROW
BEGIN
SET novaradka.cisint=-99;
SET novaradka.retez2="AHOJ";
END
P°φklad:
po p°epsßnφ sloupce dat1
v tabulce DatTab
se do sloupce kolikdni
zapφÜe rozdφl mezi starou a novou hodnotou
TRIGGER DatTabControlUpd AFTER UPDATE OF dat1 ON DatTab
REFERENCING NEW AS novarad
OLD AS stararad
FOR EACH ROW
BEGIN
SET novarad.kolikdni=CAST(Abs(novarad.dat1-stararad.dat1) AS INT);
END
P°φklad:
po p°epsßnφ jakΘhokoliv sloupce v tabulce CasTab
se do sloupce rozdil
zapφÜe rozdφl v sekundßch sloupc∙ cas1
a cas2
TRIGGER CasTabControlUpd AFTER UPDATE ON Castab
REFERENCING NEW AS novarad
FOR EACH ROW BEGIN
SET novarad.rozdil=CAST(Abs((novarad.cas2-novarad.cas1)/1000) AS INT);
END
Pro p°φpad, ₧e by se m∞l trigger spouÜt∞t pouze p°i p°epsßnφ sloupc∙ cas1
nebo cas2
, je nutnΘ vytvo°it dva triggery, liÜφcφ se (krom∞ nßzvu) pouze v Φßsti
... AFTER UPDATE OF cas1 ON Castab ...
... AFTER UPDATE OF cas2 ON Castab ...
Varianta
... AFTER UPDATE OF cas1,cas2 ON Castab ...
spustφ trigger pouze v p°φpad∞, ₧e jsou zm∞n∞ny oba sloupce najednou!