Sunteți pe pagina 1din 6

5 SQL Server Proceduri stocate

PROCEDURI STOCATE
O procedur stocat este un pachet de instruciuni SQL memorat pe server i compilat la utilizare. Avantaje: Faciliteaz actualizarea datelor prin faptul c permit ca toate aplicaiile ce modific datele s acioneze n acelai mod; Accept definirea de parametri i astfel permit executarea acelorai instruciuni SQL cu seturi diferite de parametri; Utilizarea procedurilor stocate permite diminuarea fluxului de date n reea micornd secvenele de cod SQL ce sunt transmise serverului; Deoarece planurile de execuie sunt pstrate de server, performanele aplicaiilor pot fi mbuntite n mod semnificativ. Utilizarea procedurilor stocate presupune parcurgerea urmtoarelor etape: 1. Crearea procedurii (prin intermediul comenzii CREATE PROCEDURE) 2. Executarea de ctre utilizator (prin intermediul unei comenzi EXEC) 3. Compilarea (n timpul unei comenzi EXEC serverul va compila i optimiza procedura) 4. Executarea de ctre server (conform planului de execuie compilat al procedurii) Pentru a crea o procedur stocat se poate iniia o nou interogare n baza de date (New Query) i se va utiliza comanda:
CREATE PROCEDURE nume_procedura AS instruciuni_SQL

Pentru a modifica o procedur stocat se va utiliza comanda:


ALTER PROCEDURE nume_procedura AS instruciuni_SQL

Observaie: O procedur stocat poate conine orice instruciuni SQL valide cu cteva excepii dintre care amintim: CREATE PROCEDURE, CREATE VIEW si CREATE TRIGGER (poate ns conine comenzi de tip CREATE TABLE sau chiar CREATE DATABASE) Procedurile stocate pot fi create i prin intermediul interfeei oferite de Microsoft SQL Server Management Studio. n cadrul ferestrei Object Explorer, procedurile stocate pot fi vizualizate n cadrul coleciei Programmabilty .

Exemplul 1: CREATE PROC ListaAngajati2008 AS SELECT Nume, DataAngajare FROM Angajati WHERE DataAngajare BETWEEN 1/1/2008 AND 12/31/2008 Observaie: Lansarea n execuie a procedurii stocate se poate realiza prin simpla specificare a numelui acesteia, sau prin plasarea instruciunii EXEC naintea numelui procedurii: EXEC ListaAngajati2008

Proceduri de sistem
nafara procedurilor definite de utilizatori, SQL server pune la dispoziia programatorilor o serie de proceduri predefinite ce sunt memorate n baza de date Master. Aceste proceduri permit executarea unor rutine utile i sunt caracterizate prin prefixul sp_ n faa numelui de procedur. Cteva exemple de astfel de proceduri:
sp_databases sp_columns sp_executesql sp_help sp_rename sp_spaceused permite afisarea listei bazelor de date de pe server permite afiarea informaiilor privind coloanele unui tabel specificat ca parametru permite executarea unor instruciuni SQL specificate ca parametru afiseaza toate informaiile disponibile privind un anumit obiect din baza de date permite redenumirea obiectelor din baza de date afiseaza numrul de nregistrri i spaiul utilizat de un anumit tabel sau view pe server

Declararea variabilelor
n cadrul procedurilor stocate se pot utiliza variabile pentru a facilita prelucrarea datelor.

Variabilele se declar n cadrul instruciunilor ce urmez dup cuvntul cheie AS din definiia procedurii stocate prin intermediul unei instruuciunii DECLARE. Numele de variabile sunt precedate de simbolul @ Atribuirea unei valori se poate realiza prin instruciunile SET sau SELECT. Exemplul 2: CREATE PROCEDURE Impozite AS DECLARE @cota as numeric(3,2) SET @cota = 0.16 SELECT Nume, Salariu, Salariu*@Cota As [impozit de plata] FROM ANGAJATI

Parametrizarea procedurilor stocate


Parametrii procedurilor SQL Server sunt de tot tipuri: Parametri de intrare (Input) Parametri de ieire (Output) Parametrii de intrare permit preluarea n cadrul procedurilor stocare a unuia sau mai multor elemente variabile ce pot fi utilizate n cadrul expresiilor. Parametri de ieire sunt utilizai pentru returnarea de rezultate n urma prelucrrilor efectuate de procedura stocata O sintax simplificat a comenzii CREATE PROCEDURE, care permite i adugarea de parametri este prezentat n continuare: CREATE PROC nume_procedura [;numr] [ [ @parametru tip_de_date] [OUTPUT] [ , .n] ] AS { <instruciuni SQL> [;] [. n ;] Procedurile pot utiliza mai muli parametri de tip input (tipul implicit de parametru, dac nu se specific opiunea OUT). Parametrii nsoii de opiunea OUT, sunt tratai ca parametri de ieire (output) i sunt utilizai pentru a returna valori. Exemplul 3: Parametrizai procedura din exemplul 1 pentru a selecta doar persoanele de la un anumit departament, a cror salarii depsesc o anumit limit. Limita salarial i codul departamentului vor fi precizate prin parametri. Intruct procedura a fost deja creat la exemplul 1 (ListaAngajati2008) vom utiliza comanda ALTER PROC pentru modificare, n loc de CREATE PROC. Rezolvare

ALTER PROC ListaAngajati2008 @sal money, @Depart Char(3) AS SELECT Nume, DataAngajare FROM Angajati WHERE DataAngajare BETWEEN '1/1/2008' AND '12/31/2008' AND Salariu>@sal AND CodDepartament=@depart
Pentru a lansa n execuie o astfel de procedur trebuie atribuite valori parametrilor. Atribuirea de valori se poate realiza prin enumerarea valorilor parametrilor in aceeai ordine n care au fost declarai n procedur sau prin specificarea exact a numelui parametrului n faa fiecrei valori: EXEC ListaAngajati2008 1900, 'IT' sau EXEC ListaAngajati2008 @sal=1900, @depart='IT' Comenzile prezentate mai sus vor afia lista persoanelor angajate in 2008 la departamentul IT care au salarii peste 1900 RON. In exemplul precedent, nespecificarea valorii pentru unul dintre cei doi parametri va genera o eraore i imposibilitatea de a executa procedura. Pentru a prentmpina astfel de situaii, parametrilor de intrare li se pot asocia valori implicite care vor fi utilizate atunci cnd nu se precizeaz o alt valoare. Pentru a atribui valoarea implicit 1000 parametrului @sal i valoarea fin parametrului @depart se va modifica procedura astfel:

ALTER PROC ListaAngajati2008 @sal money = 1000, @Depart Char(3) = 'fin' AS .


Exemplul 4: Pentru a exemplifica utilizarea parametrilor de ieire vom lua n considerare urmtoarea situaie: Se dorete calculul unei prime pentru toi salariaii. Prima va fi egal cu 50% din valoarea salariului propriu + 10% din valoarea celui mai mare salariu din firma. 1. Vom crea o pocedura stocata pentru a determina salariul maxim. Procedura va contine un parametru de tip OUTPUT care va prelua valoarea salariului maxim calculat pe ansamblul firmei.

CREATE PROCEDURE AflaSalariuMaxim @SalMax Money OUTPUT AS SELECT @SALMAX=MAX(SALARIU) FROM ANGAJATI

2. Pentru a calcula prima fiecrui angajat conform algoritmlui propus este necesar s executm procedura anterior creat i s prelum valoarea parametului de tip Output ntr-o variabil de memorie.
DECLARE @VariabilaSalariu AS money EXECUTE AflaSalariuMaxim @SalMax=@VariabilaSalariu OUTPUT SELECT Nume, Salariu, Salariu*0.5 + @VariabilaSalariu*0.1 AS PRIMA FROM ANGAJATI

Instruciunea RETURN
Prin intermediul comenzii RETURN, se poate fora ntreruperea execiei unei proceduri stocate. Comenzile ce urmez dup instruciunea RETURN nu vor mai fi executate.
Sintaxa instruciunii return este

RETURN [ expresie de tip intreg ]

Dup cum se poate observa, opional, dup instruciunea RETURN se poate preciza un numr ntreg ce poate fi utilizat ulterior n cadrul blocului de instruciuni ce a lansat n execuie procedura. Exemplu: S se creeze o procedur stocat pentru a afia datele unui angajat al crui CNP este specificat ca parametru. n cazul n care parametrul nu este specificat (ramane NULL) se va afia un mesaj de eroare. CREATE PROCEDURE DateAngajat @cnp char(13) = NULL AS IF @cnp IS NULL BEGIN PRINT 'NU ATI FURNIZAT UN CNP !' RETURN END ELSE

SELECT * FROM ANGAJATI WHERE CNP = @cnp Observaii: Orice procedur stocat care se execut cu succes va returna valoarea zero. Procedurile stocate care provoac la execuie o eroare vor returna un cod negativ (de la -1 la -14)

STRUCTURI DE CONTROL AL FLUXULUI


Transact SQL permite realizarea de prelucrri complexe n cadrul procedurilor stocate prin intermediul instruciunilor ce controleaz fluxul execuiei n pachetele de comenzi. Instruciunile de limbaj pentru controlul fuxului n Trasnasct SQL faciliteaz crearea de structuri alternative sau repetitive complexe. Cele mai imortante instruciuni din aceast categorie sunt: IF ELSE WHILE GOTO WAITFOR BREAK CONTINUE

--- aici urmeaza cu sintaxe i exemple Florin ---

S-ar putea să vă placă și