Documente Academic
Documente Profesional
Documente Cultură
Raport
Lucrare de laborator Nr. 8
Mersul lucrrii
GO
IF OBJECT_ID('proc1', 'P') IS NOT NULL
DROP PROCEDURE proc1;
GO
CREATE PROCEDURE proc1
@Pret FLOAT
AS
SELECT Model,
Viteza,
Hd,Pret
FROM PC_uri
WHERE Pret < @Pret;
--Another One --
GO
IF OBJECT_ID('Sample2', 'P') IS NOT NULL
DROP PROCEDURE Sample2;
GO
Create Procedure Sample2
@Tip VarChar(10)
As
SELECT Producator
FROM Produse
WHERE Tip = @Tip;
--Another One --
GO
IF OBJECT_ID('Sample3', 'P') IS NOT NULL
DROP PROCEDURE Sample3;
GO
--Another One --
IF OBJECT_ID('proc2', 'P') IS NOT NULL
DROP PROCEDURE proc2;
GO
CREATE PROCEDURE proc2
@Viteza DECIMAL (4, 0)
AS
SELECT DISTINCT Producator
FROM Produse, PC_uri
WHERE Produse.Model = PC_uri.Model
AND Viteza > @Viteza;
--Another One --
GO
IF OBJECT_ID('proc3', 'P') IS NOT NULL
DROP PROCEDURE proc3;
GO
CREATE PROCEDURE proc3
@Pret FLOAT
AS
SELECT AVG(Viteza) AS 'Viteza Medie'
FROM Laptop_uri
WHERE Pret > @Pret;
-- EXERCISE 2 --
GO
IF OBJECT_ID('delproc1', 'P') IS NOT NULL
DROP PROCEDURE delproc1;
GO
Sarcina 3: S se creeze o procedur stocat care ar insera n baza de date un model nou
de imprimant. n cazul n care datele inserate sunt incorecte sau incomplete, s se
afieze un mesaj de avertizare. n calitate de parametrii de intrare apar datele pentru
modelul respectiv.
GO
IF OBJECT_ID('proexer3', 'P') IS NOT NULL
DROP PROCEDURE proexer3;
GO
ELSE BEGIN
INSERT INTO Produse(Producator,Model,Tip) Values(@Producator, @Model,@Tip)
INSERT INTO Imprimante(Cod,Model,Color,Tip,Pret) Values(@Cod,@Model,@Color,@Tip,@Pret);
END;
-- EXERCISE 4 --
GO
IF OBJECT_ID('NrProd4', 'P') IS NOT NULL
DROP PROCEDURE NrProd4;
GO
IF (@Type = 'Imprimante')
BEGIN
SELECT Imprimante.Model, Produse.Tip, Producator, Pret,
@FinalPrice AS Pret_cu_reducere, @FinalPrice * @Units AS
Suma_totala
FROM Produse, Imprimante
WHERE Produse.Model = @Model
AND Imprimante.Model = @Model
END
ELSE IF (@Type = 'PC')
BEGIN
SELECT PC_uri.Model, Produse.Tip, Producator, Pret,
@FinalPrice AS Pret_cu_reducere, @FinalPrice * @Units AS
Suma_totala
FROM Produse, PC_uri
WHERE Produse.Model = @Model
AND PC_uri.Model = @Model
END
ELSE IF (@Type = 'Laptop_uri')
BEGIN
SELECT Laptop_uri.Model, Produse.Tip, Producator, Pret,
@FinalPrice AS Pret_cu_reducere, @FinalPrice * @Units AS
Suma_totala
FROM Produse, Laptop_uri
WHERE Produse.Model = @Model
AND Laptop_uri.Model = @Model
END
END;
GO
GO
CREATE FUNCTION sample1
(@Pret FLOAT)
RETURNS TABLE
AS
RETURN
(SELECT Model,
Viteza,
Hd,
Pret
FROM PC_uri
WHERE Pret <= @Pret)
GO
Sarcina 7: S se scrie funcia care ar calcula diferena aritmetic dintre valoarea curent
a nregistrrii n cmpul Pre al tabelului pc_uri i valoare cmpului precedent.
Ordonarea nregistrrilor n tabel s fie fcut dup cmpul Cod.
n calitate de exemplu al utilizrii acestei funcii poate servi cmpul diferena din
screenshot-ul de mai jos. Iniial cmpul diferena=0.
-- Exercise 7 --
IF OBJECT_ID('GetDiffence', 'FN') IS NOT NULL
DROP FUNCTION GetDiffence;
GO
CREATE FUNCTION GetDiffence
(@difference FLOAT)
RETURNS
@Modify TABLE (
Cod INT ,
Pret FLOAT,
Diferenta FLOAT)
AS
BEGIN
INSERT @Modify
SELECT Cod,
Pret,
@difference - Pret AS Diferenta
FROM PC_uri
ORDER BY Cod;
RETURN;
END
GO
-- Exercise 8 --
IF OBJECT_ID('Insert_Symbol', 'FN') IS NOT NULL
DROP FUNCTION Insert_Symbol;
GO
Sarcina 9: Se dorete realizarea unei funcii definite de utilizator din baza de date
calculatoare, care ar putea transforma cmpul Pre din dolari (starea curent) n euro sau
lei. Se utilizeaz tabelul imprimante. Formatul funciei este urmtorul:
Nume_funcie(valoare_pret, curs_BNM, valuta).
-- Exercise 9 --
IF OBJECT_ID('Exchange', 'FN') IS NOT NULL
DROP FUNCTION dbo.Exchange;
GO
CREATE FUNCTION Exchange
(@Curs_BNM FLOAT, @Valuta CHAR (3))
RETURNS
@Result TABLE (
Cod INT ,
Model VARCHAR (4),
Color CHAR (2) ,
Tip VARCHAR (6),
PretMDL MONEY )
AS
BEGIN
IF @Valuta = 'MDL'
BEGIN
INSERT @Result
SELECT Cod,
Model,
Color,
Tip,
Pret * @Curs_BNM as PretMDL
FROM Imprimante
END
ELSE
IF @Valuta = 'EUR'
BEGIN
INSERT @Result
SELECT Cod,
Model,
Color,
Tip,
Pret * @Curs_BNM as PretEUR
FROM Imprimante
END
RETURN;
END
GO
Select * from Exchange(19.906,'MDL');
GO
Sarcina 10: S se creeze o funcie definit de utilizator, care ar returna toate datele de un
anumit produs din stoc. Se definete urmtorul format al funciei:
Nume_funcie(pret_minimal, pret_maximal, tip_produs)
unde parametrii pot lua valori
tip_produs pc, laptop sau imprimanta
pre_maximal 0.00, valoarea implicit.
pre_minimal 10000.00, valoarea implicit.
END
ELSE
IF @product_type = 'Imprimante'
BEGIN
INSERT into @Result (Cod, Model, Color, Tip, Pret)
SELECT Cod AS CodPrinter,
Model AS ModelPrinter,
Color,
Tip,
Pret AS PretPC
FROM Imprimante
WHERE Pret >= @min_price
AND Pret <= @max_price;
END
RETURN;
END
Go
Sarcina 11: Se cere realizarea unei funcii definite de utilizator, care ar calcula cel mai
ieftin sau cel mai scump produs al unui productor. Productorul este luat n calitate de
parametru. Formatul funciei este urmtorul:
Nume_funcie (nume productor, flag)
unde, dac flag=1, va afia preul minimal pentru utilizatorul dat, iar flag = 0 va afia
preul maximal.
-- Exercise 11 --
If OBJECT_ID('ShowMINMAX','TF') is not null drop function ShowMINMAX;
Go
INSERT @Result
SELECT TOP 1 tabel.Producator,
tabel.tip,
max(tabel.Pret_Max) AS Pret_Maximal
FROM (SELECT Producator,
Produse.Tip,
max(Pret) AS Pret_Max
FROM PC_uri
INNER JOIN
Produse
ON Produse.Model = PC_uri.Model
GROUP BY Producator, Produse.Tip
UNION ALL
SELECT Producator,
Produse.Tip,
max(Pret) AS Pret_Max
FROM Laptop_uri
INNER JOIN
Produse
ON Produse.Model = Laptop_uri.Model
GROUP BY Producator, Produse.Tip
UNION ALL
SELECT Producator,
Produse.Tip,
max(Pret) AS Pret_Max
FROM Imprimante
INNER JOIN
Produse
ON Produse.Model = Imprimante.Model
GROUP BY Producator, Produse.Tip) AS tabel
WHERE Producator = @producer_name
GROUP BY tabel.Producator, tip
ORDER BY Pret_Maximal;
END
RETURN;
END
GO
Concluzie: