Documente Academic
Documente Profesional
Documente Cultură
PRO0CEDURI STOCATE
O procedură stocată este un pachet de instrucţiuni SQL memorat pe server şi compilat la
utilizare.
Avantaje:
- Facilitează actualizarea datelor prin faptul că permit ca toate aplicaţiile ce modifică
datele să acţioneze în acelaşi mod;
- Acceptă definirea de parametri şi astfel permit executarea aceloraşi instrucţiuni SQL
cu seturi diferite de parametri;
- Utilizarea procedurilor stocate permite diminuarea fluxului de date în reţea micşorând
secvenţele de cod SQL ce sunt transmise serverului;
- Deoarece planurile de execuţie sunt păstrate de server, performanţele aplicaţiilor pot fi
îmbunătăţite în mod semnificativ.
Pentru a crea o procedură stocată se poate iniţia o nouă interogare în baza de date (New
Query) şi se va utiliza comanda:
CREATE PROCEDURE nume_procedura AS instrucţiuni_SQL
Pentru a modifica o procedură stocată se va utiliza comanda:
ALTER PROCEDURE nume_procedura AS instrucţiuni_SQL
Observaţie:
O procedură stocată poate conţine orice instrucţiuni SQL valide cu câteva excepţii dintre care
amintim: CREATE PROCEDURE, CREATE VIEW si CREATE TRIGGER (poate însă
conţine comenzi de tip CREATE TABLE sau chiar CREATE DATABASE)
Procedurile stocate pot fi create şi prin intermediul interfeţei oferite de Microsoft SQL Server
Management Studio. În cadrul ferestrei Object Explorer, procedurile stocate pot fi vizualizate
în cadrul colecţiei Programmabilty .
SQL Server – Proceduri stocate 2
Exemplul 1:
CREATE PROC ListaAngajati2008 AS
SELECT Nume, DataAngajare FROM Angajati
WHERE DataAngajare BETWEEN ‘1/1/2008’ AND ‘12/31/2008’
Observaţie:
Lansarea în execuţie a procedurii stocate se poate realiza prin simpla specificare a numelui
acesteia, sau prin plasarea instrucţiunii EXEC înaintea numelui procedurii:
EXEC ListaAngajati2008
Proceduri de sistem
Înafara procedurilor definite de utilizatori, SQL server pune la dispoziţia 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 faţa numelui de
procedură.
Câteva exemple de astfel de proceduri:
Declararea variabilelor
În cadrul procedurilor stocate se pot utiliza variabile pentru a facilita prelucrarea datelor.
Variabilele se declară în cadrul instrucţiunilor ce urmeză după cuvântul cheie AS din definiţia
procedurii stocate prin intermediul unei instrucţiuni DECLARE. Numele de variabile sunt
precedate de simbolul @
Atribuirea unei valori se poate realiza prin instrucţiunile SET sau SELECT.
Exemplul 2:
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 ieşire sunt utilizaţi pentru returnarea de rezultate în urma prelucrărilor efectuate
de procedura stocata
Procedurile pot utiliza mai mulţi parametri de tip input (tipul implicit de parametru, dacă nu
se specifică opţiunea OUT). Parametrii însoţiţi de opţiunea OUT, sunt trataţi ca parametri de
ieşire (output) şi sunt utilizaţi pentru a returna valori.
Exemplul 3:
Parametrizaţi procedura din exemplul 1 pentru a selecta doar persoanele de la un anumit
departament, a căror salarii depăsesc o anumită limită.
Limita salarială şi codul departamentului vor fi precizate prin parametri.
Intrucât procedura a fost deja creată la exemplul 1 (ListaAngajati2008) vom utiliza comanda
ALTER PROC pentru modificare, în loc de CREATE PROC.
Rezolvare
Comenzile prezentate mai sus vor afişa 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 preîntâmpina astfel de situaţii,
parametrilor de intrare li se pot asocia valori implicite care vor fi utilizate atunci când nu se
precizează o altă valoare.
SQL Server – Proceduri stocate 4
Pentru a atribui valoarea implicită 1000 parametrului @sal şi valoarea ‘fin’ parametrului
@depart se va modifica procedura astfel:
Exemplul 4:
2. Pentru a calcula prima fiecărui angajat conform algoritmlui propus este necesar
să executăm procedura anterior creată şi să preluăm 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
Instrucţiunea RETURN
Prin intermediul comenzii RETURN, se poate forţa întreruperea execţiei unei proceduri
stocate. Comenzile ce urmeză după instrucţiunea RETURN nu vor mai fi executate.
După cum se poate observa, opţional, după instrucţiunea RETURN se poate preciza un număr
întreg ce poate fi utilizat ulterior în cadrul blocului de instrucţiuni ce a lansat în execuţie
procedura.
Exemplu:
Să se creeze o procedură stocată pentru a afişa datele unui angajat al cărui CNP este specificat
ca parametru. În cazul în care parametrul nu este specificat (ramane NULL) se va afişa un
mesaj de eroare.
SQL Server – Proceduri stocate 5
Observaţii:
Orice procedură stocată care se execută cu succes va returna valoarea zero. Procedurile
stocate care provoacă la execuţie o eroare vor returna un cod negativ (de la -1 la -14)