14. díl - MS-SQL - Uložené procedury

MS-SQL krok za krokem MS-SQL - Uložené procedury

Úvod

V tomto článku se zaměříme na uložené procedury na MS-SQL. Procedury nejsou nic jiného, než uložené části kódu, který můžeme použít znovu a ušetříme čas při jejich vytváření. Pouze jednoduše zavoláme uloženou proceduru. Výhodou je, že v procedurách můžeme použít parametry a tím kód modifikovat.

Vytvoření procedury

Proceduru vytvoříme pomocí T-SQL.

Příklad: Chceme často volat příkaz, který vypíše seznam adres pro nějaké jméno:

SELECT * FROM Adresy WHERE Adresy.Name='Novak'

K vytvoření procedury použijeme příkaz CREATE

USE MojeDatabaze
GO
CREATE PROCEDURE dbo.VyberAdresy
AS
SELECT * FROM Adresy
WHERE Adresy.Name='Novak'
GO

Procedura se po vytvoření uloží do databáze do adresáře Programmability.

Spuštění procedury

Proceduru lze po vytvoření opakovaně spustit příkazem EXEC.

EXEC dbo.VyberAdresy
-- nebo
EXEC VyberAdresy
-- nebo jednoduše
VyberAdresy

Vytvoření procedury s parametrem

Někdy může být výhodné, když procedura obsahuje parametry, které můžeme při zavolání měnit. Například parametr pro zvolené jméno. Parametrů může být několik a oddělují se čárkou. Proceduru s parametrem vytvoříme takto.

CREATE PROCEDURE dbo.VyberAdresy @Jmeno nvarchar(30)
AS
SELECT * FROM Adresy
WHERE Adresy.Name=@Jmeno
GO

Volání procedury pak probíhá následovně

EXEC dbo.VyberAdresy @Jmeno='Novak'

Parametr s výchozí hodnotou

Je dobrým zvykem definovat výchozí hodnotu parametru, aby nedocházelo k chybám, pokud zavoláte proceduru bez parametru. Tato procedura pak proběhne bez chyb, jako kdyby byl parametr standardně zadán s hodnotou NULL.

CREATE PROCEDURE dbo.VyberAdresy @Jmeno nvarchar(30) = NULL
AS
SELECT * FROM Adresy
WHERE Adresy.Name=@Jmeno
GO

Procedura s výstupním parametrem

Nastavení výstupního parametru je prakticky stejné, jako nastavení vstupního, s tím rozdílem, že použijete direktivu OUTPUT nebo jenom OUT. Samozřejmě má smysl mít pouze jeden výstupní parametr.

CREATE PROCEDURE dbo.PocetAdres @Pocet int OUTPUT
AS
SELECT count(*) FROM Adresy
GO

Volání procedury potom vypadá takto

DECLARE @Vysledek
EXEC dbo.PocetAdres @Pocet=@Vysledek OUTPUT
-- nebo
EXEC dbo.PocetAdres @Vysledek OUTPUT

Použití TRY – CATCH v procedurách

Pokud neznáte Try-Catch, tak jde v podstatě o dva bloky kódu. První blok se provádí a dokončí, pokud nedojde k nějaké chybě. Pokud ano, přejde program na druhý blok kódu. Například, když potřebujeme zachytit a popsat nějakou chybu, ke které dojde v průběhu hlavního bloku programu. Používá se třeba při ladění kódu.

CREATE PROCEDURE dbo.TryCatch
AS
BEGIN TRY
-- hlavní blok kódu
SELECT 1/0 -- zde vznikne chyba při dělení nulou
END TRY
BEGIN CATCH
-- blok kódu, který se provede při chybě v hlavním programu
SELECT ERROR_NUMBER() AS ErrorNumber
     ,ERROR_MESSAGE() AS ErrorMessage;
END CATCH

A výsledek:

Komentáře v procedurách

V procedurách můžeme použít dva druhy komentářů. Komentář začíná znaky -- nebo je mezi /* a */

-- toto je řádkový komentář
/*
Toto je blokový komentář
*/

Druhy komentářů lze libovolně kombinovat.

Změna uložené procedury

Proceduru můžeme změnit příkazem ALTER

ALTER PROCEDURE dbo.VyberAdresy @Jmeno nvarchar(30) = NULL
AS
SELECT * FROM Adresy
WHERE Adresy.Name  LIKE @Jmeno + '%'

Smazání uložené procedury

Proceduru je možné smazat pomocí příkazu DROP

DROP PROCEDURE dbo.VyberAdresy

 

  Aktivity (2)

Článek pro vás napsal Ondřej Trnka
Avatar

Jak se ti líbí článek?
Celkem (2 hlasů) :
4.54.54.54.54.5


 


Miniatura
Předchozí článek
MS-SQL - Transakce
Miniatura
Všechny články v sekci
MS-SQL databáze krok za krokem
Miniatura
Následující článek
MS-SQL - Datové typy podrobněji

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!