602SQL-Úplná dokumentace Index  

Spouštění UPDATE triggerů s uvedeným seznamem sloupců

Syntaxe UPDATE triggeru dovoluje uvést seznam sloupců, při jejichž změně se má trigger spustit. Příkaz UPDATE nebo API funkce Write_record_ex mohou modifikovat najednou celou množinu sloupců. Norma SQL není zcela jasná v tom, v jakém vztahu musí být seznam sloupců uvedených v definici triggeru a množina měněných sloupců, aby došlo ke spuštění triggeru.

V prvních verzích 602SQL serveru se spouštěl trigger tehdy, když byly obě skupiny sloupců stejné. Od verze 8.0 je tato možnost nadále zachována, ale přibyla alternativní možnost spouštět trigger, když obě množiny mají neprázdný průnik, tedy když je příkazem změněn alespoň jeden ze sloupců, které jsou uvedeny v seznamu.

Pravidla pro spouštění triggeru lze zvolit dvojím způsobem:

  1. Pro konkrétní trigger uvedením znaku = nebo slova ANY za UPDATE OF. Znak = znamená, že se trigger spustí pouze při rovnosti množin sloupců. Slovo ANY znamená, že se trigger spustí při změně libovolného ze sloupců uvedených v seznamu.
  2. Pro všechny triggery, které nejsou označeny podle bodu 1, nastavením příznaku kompatibility SQLOPT_COL_LIST_EQUAL (32768) pomocí funkce Set_sql_option nebo globálně pomocí dialogu Provozní parametry, záložka SQL kompatibilita.

Příklad:

TRIGGER `Aktualizace_obj` AFTER UPDATE OF ANY zpracovana,storno_dat,storno,d_uhrady ON `Obj_hlav`
/****************************************************/
// při změně kteréhokoliv z vyjmenovaných sloupců se zapíše akt. timestamp k objednávce
REFERENCING OLD AS `old` NEW AS `new`              
FOR EACH ROW
BEGIN
  IF (old.zpracovana<>new.zpracovana) OR (old.storno_dat<>new.storno_dat) 
      OR (old.storno<>new.storno) OR (old.d_uhrady<>new.d_uhrady)
    THEN SET new.dat_akt=CURRENT_TIMESTAMP;
  END IF;
END