Sunteți pe pagina 1din 15

 grupează in cadrul unui obiect SQL de sine

stătător o secvenţă de instrucţiuni SQL


încapsulată, ce poate fi reutilizată ori de câte ori
este nevoie, in cadrul altor obiecte SQL Server
 pot fi utilizate în cadrul obiectelor de tip View
sau al procedurilor stocate diminuând
considerabil dimensiunea codului SQL şi
facilitând o mai bună structurare a acestuia.
 pot fi utilizate pentru simularea unor tabele
virtuale extrem de utile în programarea
procedurilor
 Funcţii de tip scalar (scalar functions)
 Funcţii de tip tabelar (table valued functions)
 accepta zero sau mai mulţi parametri
 returnează o singură valoare
 CREATE FUNCTION [numeproprietar.] nume_funcţie ([ @parametru_1 AS
tip_de_date], …. [ @parametrul_n AS tip_de_date] )

RETURNS tip_de date


AS
BEGIN
INSTRUCŢIUNI SQL
RETURN valoare de returnat
END

 Pentru modificare:
 ALTER FUNCTION .....
 Pentru ştergere:
 DROP FUNCTION .....
 CREATE FUNCTION StabilesteDob(@pSalariu as money)
 RETURNS money
 AS
 BEGIN
 DECLARE @vDobanda as money
 IF @pSalariu < 1000
 SET @vDobanda = 0.1

 IF @pSalariu >=1000 AND @pSalariu <4000


 SET @vDobanda = 0.08

 IF @pSalariu > 4000


 SET @vDobanda = 0.05

 RETURN @vDobanda
 END
 CREATE FUNCTION StabilesteDob1(@pSalariu as
money)
 RETURNS money
 AS
 BEGIN
 DECLARE @vDobanda as money
 IF @pSalariu < 1000
 SET @vDobanda = 0.1
 ELSE
 IF @pSalariu < 4000
 SET @vDobanda = 0.08
 ELSE
 SET @vDobanda = 0.05

 RETURN @vDobanda
 END
 SELECT dbo.StabilesteDob(6000)

 SELECT dbo.StabilesteDob(Salariu),
 Nume, Prenume, CNP, Salariu FROM
 Persoana
 A. Varianta INLINE.

 se returnează un tabel ca rezultat, fără a fi


nevoie sa se definească structura acestuia
 nu sunt permise BEGIN ….END
 este permisă o frază SQL de tip SELECT
 fiecare câmp din interogarea sursă trebuie să
aibă un nume
 clauza ORDER BY este permisă numai dacă se
utilizează împreună cu TOP
 nu sunt permise prelucrări complexe
 A. Varianta INLINE.

 CREATE FUNCTION [numepropritar.] nume_funcţie ([ @parametru_1


AS tip_de_date], … [ @parametrul_n AS tip_de_date] )

RETURNS TABLE
As
 RETURN (fraza_SQL_SELECT)
 CREATE FUNCTION
ListaDepuneriParametrii(@pDataInceput
as date,
 @pDataSfarsit as date)
 RETURNS TABLE
 AS
 RETURN (SELECT NrDepunere,
DataDepunerii, NrCont, SumaDepusa
 FROM Depuneri
 WHERE DataDepunerii BETWEEN
@pDataInceput AND @pDataSfarsit)
 CREATE PROCEDURE ListaDepuneriConturi
 @pDataInceput as date,
 @pDataSfarsit as date
 AS
 SELECT * FROM Conturi
 INNER JOIN
 ListaDepuneriParametrii(@pDataInceput,@
pDataSfarsit) as F1
 ON Conturi.NrCont = F1.NrCont
 B. varianta MULTIINSTRUCŢIUNE

 se returnează un tabel rezultat


 este necesar să se definească explicit structura
tabelului rezultat
 poate include prelucrări complexe
 B. varianta MULTIINSTRUCŢIUNE

 CREATE FUNCTION [numepropritar.] nume_funcţie ([ @parametru_1


AS tip_de_date], …. [ @parametrul_n AS tip_de_date] )

 RETURNS @variabila_output TABLE


 (câmp_1 tip de date, …câmp_N tip de date)

 AS
 BEGIN
 INSTRUCŢIUNI SQL
 RETURN
 END
 CREATE FUNCTION ListaDepPer(@pDataI date, @pDataSf date)
 RETURNS @vTabel table (NrCont bigint, Nume nvarchar(100),
 Prenume nvarchar(100), TotalDepuneri money)
 AS
 BEGIN
 insert into @vTabel
 select conturi.nrcont, nume, prenume, sum(sumadepusa)
 from persoana, conturi, depuneri
 where persoana.cnp = conturi.cnp and
 conturi.nrcont = depuneri.nrcont and
 datadepunerii between @pDataI AND @pDataSf
 group by conturi.nrcont, nume, prenume

 return
 END

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