Trigger ( angl. trigger ) je uložená procedura speciálního typu, kterou uživatel nevolá přímo, a jejíž provedení je způsobeno akcí úpravy dat: přidáním INSERT, odstraněním DELETEřádku v dané tabulce nebo změnou UPDATEdat v konkrétní sloupec dané tabulky relační databáze .
Spouštěče se používají k zajištění integrity dat a implementaci komplexní obchodní logiky . Spouštěč automaticky spustí server, když se pokusí změnit data v tabulce, ke které je přidružen. Všechny úpravy dat, které provede, jsou považovány za provedené v transakci , ve které byla provedena akce, která způsobila spuštění spouštěče. Pokud je tedy zjištěna chyba nebo je narušena integrita dat, může být tato transakce vrácena zpět.
Spuštění spouštěče je definováno pomocí klíčových slov BEFORE(spouštěč se spustí před provedením události s ním spojené; například před přidáním záznamu) nebo AFTER(po události). Pokud je trigger zavolán před událostí, může provést změny v záznamu upraveném událostí (samozřejmě za předpokladu, že událost není smazáním záznamu). Některé DBMS ukládají omezení na příkazy , které lze použít ve spouštěči (například může být zakázáno provádět změny v tabulce, na které spouštěč „visí“ atd.).
Spouštěče lze navíc připojit nikoli k tabulce, ale k pohledu (VIEW). V tomto případě je s jejich pomocí implementován mechanismus „aktualizovaného pohledu“. V tomto případě klíčová slova BEFOREa AFTERovlivňují pouze posloupnost spouštěcích volání, protože skutečná událost (smazání, vložení nebo aktualizace) nenastane.
Na některých serverech nemusí být spouštěče volány pro každý upravený záznam, ale jednou za změnu tabulky. Takové spouštěče se nazývají spouštěče tabulky.
Příklad ( Oracle Database ):
/* Spouštěč na úrovni tabulky */ VYTVOŘTE NEBO NAHRAĎTE TRIGGER DistrictUpdatedTrigger PO AKTUALIZACI ON district BEGIN vložit do info values ( 'tabulka "okres" se změnila' ); KONEC ;V tomto případě, aby bylo možné odlišit spouštěče tabulky od spouštěčů řádků, jsou při popisu řádkových spouštěčů zavedena další klíčová slova. V Oracle je to fráze FOR EACH ROW.
Příklad:
/* Spouštěč na úrovni řádku */ VYTVOŘTE NEBO NAHRAĎTE SPOUŠTĚČ DistrictUpdatedTrigger PO AKTUALIZACI NA KAŽDÝ ŘÁDEK ZAČNĚTE vložit do info values ( ' jeden řádek v tabulce " okres " se změnil' ); KONEC ;Databáze | |
---|---|
Koncepty |
|
Objekty |
|
Klíče | |
SQL | |
Komponenty |