Triggery spouÜt∞nΘ editacφ dat ve formulß°i

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!