proceduri stocate exemple
DESCRIPTION
BAZE DE DATE AVANSATE - SQL SERVER 2008TRANSCRIPT
PROCEDURI STOCATE
EXEMPLE
1
Tabelele utilizate pentru exemple:
2
Exemplu cu variabile de memorieCerinţă:In tabelul Angajati există pentru fiecare salariat DataAngajare şi DataPlecare în/din firma. Realizaţi o procedură stocată cu parametru pentru a vizualiza pentru o anumită persoană (CNP-ul transmis ca parametru), care au fost angajaţii care au lucrat în firmă în perioada cu respectivul angajat.
CREATE PROC EXEMPLU1@cnp AS CHAR(13)ASDECLARE @Data1 AS datetimeDECLARE @Data2 AS datetime set @Data1= (select DataAngajare From Angajati WHERE CNP=@cnp)set @Data2= (select DataPlecare From Angajati WHERE CNP=@cnp)
SELECT NUME, DataAngajare, DataPlecareFROM ANGAJATIWHERE DataAngajare BETWEEN @Data1 AND @Data2 or DataPlecare BETWEEN @Data1 AND @Data2
or @Data1 between DataAngajare and DataPlecare
Se memoreazădata angajării şi data plecării angajatului in 2 variabile
Salariatii veniti in intervalul in care a lucrat angajatul
Salariatii plecati in intervalul in care a lucrat angajatul
Salariatii veniti inaintea angajatului si plecati dupa
plecarea acestuia3
SELECT Nume, VenitLunaCurenta, RANK() OVER (ORDER BY VenitLunaCurenta desc) as ClasificareVenitFROM(
) AS Interogare2
SELECT NUME, Salariu, TotalPrime, Salariu+Isnull(TotalPrime,0) AS VenitLunaCurentaFROM Angajati LEFT JOIN (
) AS Interogare1ON Angajati.CNP=Interogare1.CNP
Exemplu de utilizare a mai multor instrucţiuni SELECT in clauza FROMCerinţă:1. Calculaţi total prime pe luna curentă pe fiecare CNP (pe baza tabelului Prime)2. Utilizând ca sursă comanda interogarea precedenta si tabelul Angajati calculati venitul fiecarui angajat pe luna curenta (salariu + total prime luna curenta).3. Utilizand ca sursa interogarea rezultata la punctul precedent, clasificati angajatii dupa venitul lunii curente (descrescator), utilizând funcţia RANK.
SELECT CNP, SUM(SumaPrima) AS TotalPrimeFROM PRIMEWHERE Year(DataPrima)= YEAR(Getdate()) AND MONTH(DataPrima)=MONTH(getdate()) GROUP BY CNP
Este necesar ca subinterogarile din clauza FROM
să fie plasate intre paranteze si denumite cu AS
Se utilizează funcţia ISNULL pentru înlocui cu zero suma primelor în cazul angajatilor care nu au prime
4