4.6. Spouště

Spoušť (Trigger) je speciální uloženou procedurou, která reaguje na některé operace. Spouště mohou reagovat například na vkládání záznamu, mazání záznamu, aktualizaci záznamu a na jejich libovolné kombinace. Ukážeme si tedy dvě jednoduché možnosti využití.

Příklad 1: V tabulce Auta jsme vytvořili položku pro počet oprav provedených na jednotlivých autech (autPocet_oprav). Abychom tuto položku nemuseli počítat a vkládat ručně, doplní se automaticky z počtu záznamů z tabulky Opravy.

Klíčová slova CREATE TRIGGER zakládají novou spoušť s názvem PocetOprav pro tabulku Opravy. Další řádek určuje, na které příkazy bude spoušť reagovat. V našem případě to bude na vkládání, změna a mazání záznamů v tabulce Opravy.

V dalším kroku se tážeme na existenci tabulky Inserted. Tato tabulka se vytvoří při vkládání záznamů, existuje pouze uvnitř spouště a její životnost je omezena jen na dobu trvání programového kódu spouště. Jestliže byl pořízen nový záznam v tabulce Opravy, tabulka Inserted existuje, pak se provede SQL příkaz pro změnu záznamu v tabulce Auta, kde přičteme jedničku k položce autPocet_oprav.

Při mazání záznamů pracuje spoušť podobným způsobem. Ve spoušti se bude zakládat také speciální tabulka, ale s názvem Deleted. Jestliže tedy bude existovat tabulka Deleted, provede se SQL příkaz pro změnu záznamu v tabulce Auta, kde odečteme jedničku od položky autPocet_oprav.

Spoušť pro změnu záznamu (typu UPDATE) je kombinací dvou předchozích. Na rozdíl od nich však nevytváří pouze jednu speciální tabulku, ale hned dvě - Inserted i Deleted. Jestliže budou existovat obě speciální tabulky Inserted i Deleted, provedou se i oba SQL příkazy po sobě.

Příklad 2: V tabulce Auta máme vytvořenou položku celková cena (autCena_celkem), ve které chceme zobrazovat kolik celkově zaplatil zákazník za opravy na daném autě.

Tento kód nám opět bude reagovat na vkládání, změnu a mazání záznamů v tabulce Opravy. Proti předchozímu příkladu zaznamenal několik změn. První změna se týká přesunutí pořadí programového kódu. Nejprve tedy musíme zjišťovat existenci tabulky Deleted, protože při změně ceny za opravu (oprCena) je potřeba nejprve původní cenu od celkové odečíst a teprve pak přičíst cenu novou. K další změně došlo v SQL příkazu, kdy od celkové ceny (autCena_celkem) v tabulce Auta odčítáme, nebo přičítáme cenu za jednu opravu (oprCena) v tabulce oprav.

<Předcházející stránka    Další stránka>