Documente Academic
Documente Profesional
Documente Cultură
RECAPITULARE EXAMEN
1. ADAUGATI TABELUL Concedii tinand cont ca pentru fiecare concediu se cunosc: DataPlecare, Numar
zile, TipConcediu.
Un angajat poate sa solicite mai multe concedii de odihna. Data plecare si numarul de zile trebuie
obligatoriu completate.
CREATE TABLE CONCEDII (IdConcediu int identity primary key,
Data date NOT NULL, NumarZile int NOT NULL,
CodAngajat bigint FOREIGN KEY
REFERENCES Angajati(CodAngajat) )
2. Adaugati o restrictie pentru salariul din tabelul Angajati pentru a nu permite valori peste 2000.
3. Realizati un trigger astfel incat un salariat sa nu poata beneficia de mai mult de 30 de zile de concediu.
CREATE TRIGGER LIMITA_CONCEDII ON CONCEDII FOR UPDATE, INSERT AS
IF EXISTS (SELECT CODANGAJAT, SUM(NUMARZILE) FROM CONCEDII
GROUP BY CODANGAJAT HAVING SUM(NUMARZILE) >30)
BEGIN
RAISERROR ('ATI DEPASIT 30 DE ZILE', 1,1)
ROLLBACK TRANSACTION
END
4. Realizati un View pentru a calcula un spor salarial de 100 lei pentru toti salariatii, iar pentru cei care au
participat la mai mult de 10 aprovizionari sa se mai adauge 5% din salariu.
5. Realizati o procedura stocata pentru a determina care sunt furnizorii dintr-o anumita tara (parametru)
pentru care valoarea vanzarilor depaseste o anumita suma (parametru) prin parametru, dupa
1.1.2007.
CREATE PROC ListaFz
@tara nvarchar(20),
@suma money
as
SELECT F.CODFZ, NUMEFZ,
SUM(CANTITATE*PRETUNITAR) AS TOTAL
FROM FURNIZORI F INNER JOIN APROV ON F.CODFZ=APROV.CODFZ
WHERE TARA=@TARA AND DATAAP>'01/01/2007'
GROUP BY f.CODFZ, NUMEfz
HAVING SUM(CANTITATE*PRETUNITAR)>@SUMA
6. Realizati o procedura pentru a clasifica furnizorii dupa valoarea vanzarilor (descrescator). Apoi,
selectati doar acei furnizori care se incadreaza intre primii 10 si, de la care s-au primit aprovizionari in
2007 sau 2008.
7. Realizati o functie de tip scalar care sa primeasca drept argument un cod de furnizor si sa returneze
numarul de aprovizionari realizate din aceeasi localitate, pe langa aprovizionarile respectivului
furnzior.
CREATE FUNCTION NUMAR_APROV_ACELASI_ORAS (@COD AS BIGINT)
RETURNS INT
AS
BEGIN
DECLARE @ORAS AS NVARCHAR(20)
SET @ORAS=(SELECT LOCALITATE FROM FURNIZORI
WHERE CODFZ=@COD)
DECLARE @TOTALORAS AS INT
SET @TOTALORAS=(SELECT COUNT(CODAPROV) FROM APROV A INNER JOIN FURNIZORI F ON A.CODFZ=F.CODFZ
WHERE LOCALITATE=@Oras)
RETURN (SELECT @TOTALORAS-COUNT(CODAPROV)
FROM APROV WHERE CODFZ=@COD AND Localitate=@Oras)
END
EXEMPLU DE UTILIZARE:
CREATE PROC EXEMPLUUTILIZARE
AS
SELECT CODFZ, NUMEFZ, DBO.APROV2(CODFZ)
FROM FURNIZORI
WHERE TARA='ROMANIA'
8. Realizati o functie de tip tabel care sa primeasca drept argument un an si o luna calendaristica si sa
returneze, codul furnizorului, numele si totalul valoric al aprovizionarilor pe furnizor din perioada
respectiva si, intr-un alt cmp, ct reprezint acest total din totalul aprovizionarilor pe luna respectiva.
CREATE FUNCTION FURNIZORIAPROV(@AN AS INT, @LUNA AS INT)
RETURNS @TABEL TABLE (COD INT, NUME NVARCHAR(50),
9.
Utilizati functia intr-o procedura care sa afiseze care sunt furnizorii cu pondere mai mare de 8%
din valoarea totala aprovizionata in ianuarie 2008.
CREATE PROC AF_FZ
SELECT *
FROM DBO.FURNIZORIAPROV (2008,1)
WHERE PONDERE>0.08