Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.

Podobné prezentace


Prezentace na téma: "Informační systémy Realizace uložených procedur a spouští, jejich praktické využití."— Transkript prezentace:

1 Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.

2 Obsah cvičení Tvorby uložené procedury. Aplikace uložené procedury. Tvorba spouště. Aplikace spouště.

3 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 (@NazevProj varchar(max), @SpoluresP nchar(25),@SpoluresJ nchar(15),@Od smalldatetime,@Do smalldatetime) AS -- Deklarace proměnných pro zjištění IC projektu a IC zaměstnance. DECLARE @ICProjektu int, @ICSpolures char(5) … pokračování na dalším snímku

4 Uložená procedura (2) -- Kontrola existence názvu projektu IF NOT EXISTS (SELECT p_ICislo FROM TProjekt WHERE p_Nazev=@NazevProj) 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 SET @ICProjektu=(SELECT p_ICislo FROM TProjekt WHERE p_Nazev=@NazevProj) … pokračování na dalším snímku

5 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 ((@SpoluresJ IS NOT NULL AND @SpoluresJ IS NOT NULL) AND EXISTS (SELECT z_Prijmeni,z_Jmeno FROM TZamestnanec WHERE z_Prijmeni=@SpoluresP AND z_Jmeno=@SpoluresJ)) 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 z_Jmeno=@SpoluresJ AND z_Prijmeni=@SpoluresP)>1 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 SET @ICSpolures=(SELECT z_IC FROM TZamestnanec WHERE (z_Jmeno=@SpoluresJ AND z_Prijmeni=@SpoluresP)) END … pokračování na dalším snímku

6 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 ((@SpoluresP IS NOT NULL AND @SpoluresJ IS NULL) AND EXISTS (SELECT z_Prijmeni FROM TZamestnanec WHERE z_Prijmeni=@SpoluresP)) 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_Prijmeni=@SpoluresP)=1 SET @ICSpolures=(SELECT z_IC FROM TZamestnanec WHERE z_Prijmeni=@SpoluresP) 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

7 Uložená procedura (5) …. Další pokračování kódu na dalším snímku IF ((@SpoluresJ IS NOT NULL AND @SpoluresP IS NULL) AND EXISTS (SELECT z_Jmeno FROM TZamestnanec WHERE z_Jmeno=@SpoluresJ)) 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_Prijmeni=@SpoluresP)=1 SET @ICSpolures=(SELECT z_IC FROM TZamestnanec WHERE z_Prijmeni=@SpoluresP) 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 (@SpoluresJ IS NULL AND @SpoluresP 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

8 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 (@ICProjektu,@ICSpolures,@Od,@Do) GO … konec tvorby uložené procedury -- Volání uložené procedury USE [EvidProjektu] GO DECLARE @return_value int EXEC @return_value = [dbo].[ProcVlozSpolures] @NazevProj = 'SW signal analyzér a komunikační software s měřicí kartou', @SpoluresP = 'Farana‚ @SpoluresJ = 'Radim', @Od = '10-MAR-08', @Do = '30-NOV-2008' SELECT'Return Value' = @return_value GO

9 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.

10 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 DECLARE @Od smalldatetime,@Do smalldatetime, @Proj int, @ZahajRes smalldatetime, @KonecRes smalldatetime,@Upd smallint SET @Od= (SELECT s_OdDatum FROM TSpolures WHERE s_IC= (SELECT max(s_IC) FROM TSpolures) ) ; SET @Do= (SELECT s_DoDatum FROM TSpolures WHERE s_IC= (SELECT max(s_IC) FROM TSpolures) ) ; SET @Proj= (SELECT s_ICislo FROM TSpolures WHERE s_IC= (SELECT max(s_IC) FROM TSpolures) ) ; SET @ZahajRes= (SELECT p_ZahajRes FROM TProjekt WHERE p_ICislo=@Proj) ; SET @KonecRes= (SELECT p_KonecRes FROM TProjekt WHERE p_ICislo=@Proj) ;

11 Spouště (3) -- Za předpokladu, že @Od bude vždy menší než @Do IF @Od =@KonecRes BEGIN SET @Upd=1 SET @Od=@ZahajRes PRINT('Změna datumu počátku spolupráce.') END IF @Do @KonecRes BEGIN SET @Upd=1 SET @Do=@KonecRes PRINT('Změna datumu počátku spolupráce.') END IF @Upd=1 UPDATE TSpolures SET s_OdDatum=@Od,s_DoDatum=@Do WHERE s_IC=(SELECT max(s_IC) FROM TSpolures) END; GO

12 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.


Stáhnout ppt "Informační systémy Realizace uložených procedur a spouští, jejich praktické využití."

Podobné prezentace


Reklamy Google