Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
Obsah cvičení Tvorby uložené procedury. Aplikace uložené procedury. Tvorba spouště. Aplikace spouště.
Uložená procedura (1) Vytvořit uloženou proceduru ProcVlozSpoulures pro vkládání záznamů do tabulky TSpolures. Vstupními parametry procedury jsou (název projektu, příjmení spoluřešitele, jméno spoluřešitele, datum začátku spolupráce a datum konce spolupráce). USE EvidProjektu; GO -- Definice pro vytvoření procedury CREATE PROCEDURE ProcVlozSpolures smalldatetime) AS -- Deklarace proměnných pro zjištění IC projektu a IC zaměstnance. char(5) … pokračování na dalším snímku
Uložená procedura (2) -- Kontrola existence názvu projektu IF NOT EXISTS (SELECT p_ICislo FROM TProjekt WHERE BEGIN PRINT('Projekt s tímto názvem není v databázi!!') RETURN END ELSE -- Uložit číslo projektu pro jeho další využití pro funkci INSERT p_ICislo FROM TProjekt WHERE … pokračování na dalším snímku
Uložená procedura (3) -- Kontrola existence spoluřešitele -- (pokud je zadáno příjmení a jméno, zda existuje, pak zjistit jeho ID) IF IS NOT NULL IS NOT NULL) AND EXISTS (SELECT z_Prijmeni,z_Jmeno FROM TZamestnanec WHERE AND BEGIN -- Kontrola, zda neexistuje více zaměstnanců se stejným jménem a příjmením IF (SELECT Count(z_IC) FROM TZamestnanec GROUP BY z_Jmeno, z_Prijmeni HAVING AND BEGIN PRINT('Zaměstnanců s tímto jménem a příjmením je více. Záznam nebude vložen.') RETURN END ELSE -- Zjistit ID zaměstance a uložit jej pro jeho další využití pro funkcí INSERT z_IC FROM TZamestnanec WHERE AND END … pokračování na dalším snímku
Uložená procedura (4) ELSE -- Zjištění ID čísla zaměstnance, pokud bylo zadáno pouze jméno nebo pouze příjmení BEGIN IF IS NOT NULL IS NULL) AND EXISTS (SELECT z_Prijmeni FROM TZamestnanec WHERE BEGIN -- Kontrola, zda existuje pouze a právě jedno příjmení pro zjištění jeho ID IF (SELECT Count(z_Prijmeni) FROM TZamestnanec WHERE z_IC FROM TZamestnanec WHERE ELSE BEGIN PRINT('Zaměstnanců s tímto příjmením existuje více, je nutné doplnit ještě jméno.') RETURN END … pokračování na dalším snímku
Uložená procedura (5) …. Další pokračování kódu na dalším snímku IF IS NOT NULL IS NULL) AND EXISTS (SELECT z_Jmeno FROM TZamestnanec WHERE BEGIN -- Kontrola, zda existuje pouze jedno křestní jméno spoluřešitele, pak zjistíme jeho ID IF (SELECT Count(z_Prijmeni) FROM TZamestnanec WHERE z_IC FROM TZamestnanec WHERE ELSE BEGIN PRINT('Zaměstnanců s tímto křestním jménem existuje více, je nutné doplnit ještě příjmení.') RETURN END -- Kontrola, zda nebyl vložen parametr s křestním jménem ani příjmením IF IS NULL IS NULL) BEGIN PRINT('Nebylo vloženo jméno ani příjmení spoluřešitele!'); RETURN END … pokračování na dalším snímku
Uložená procedura (6) -- Pokud jsme již zde, tak máme číslo projektu i číslo spoluřešitele, pak lze vložit záznam do databáze INSERT TSpolures (s_ICislo,s_ICZamest,s_OdDatum,s_DoDatum) VALUES GO … konec tvorby uložené procedury -- Volání uložené procedury USE [EvidProjektu] GO int = = 'SW signal analyzér a komunikační software s měřicí = = = = '30-NOV-2008' SELECT'Return Value' GO
Spouště (1) Vytvořit spoušť, která při vložení spoluřešitele kontroluje datum spolupráce. Datum, které je mimo rozsah doby řešení projektu, nastaví dle této doby řešení projektu.
Spouště (2) USE EvidProjektu; GO CREATE TRIGGER TRTSpoluresKontrDatum /* Vložit spoušť pro tabulku TSpolures*/ /*... probíhá kontrola u posledně vloženého záznamu na datum Od, Do*/ ON TSpolures AFTER INSERT AS BEGIN smallint (SELECT s_OdDatum FROM TSpolures WHERE s_IC= (SELECT max(s_IC) FROM TSpolures) ) ; (SELECT s_DoDatum FROM TSpolures WHERE s_IC= (SELECT max(s_IC) FROM TSpolures) ) ; (SELECT s_ICislo FROM TSpolures WHERE s_IC= (SELECT max(s_IC) FROM TSpolures) ) ; (SELECT p_ZahajRes FROM TProjekt WHERE ; (SELECT p_KonecRes FROM TProjekt WHERE ;
Spouště (3) -- Za předpokladu, bude vždy menší BEGIN SET PRINT('Změna datumu počátku spolupráce.') BEGIN SET PRINT('Změna datumu počátku spolupráce.') END UPDATE TSpolures SET WHERE s_IC=(SELECT max(s_IC) FROM TSpolures) END; GO
Shrnutí Uložená procedura – určena pro úpravy databází v T-SQL. Uložené procedury je vhodné vytvářet přímo v databázovém serveru, aby nebylo nutné přecházet mezi aplikací a serverem a zajišťovat připojení k serveru. Spouště – speciální uložené procedury, které se volají při změně obsahu databáze. Na rozdíl od uložených procedur se spouště aktivují změnou databáze (INSERT, UPDATE, DELETE), nikoliv pomocí EXEC jako uložené procedury.