Sunteți pe pagina 1din 10

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei


Facultatea Calculatoare, Informatic i Microelectronic
Catedra Automatica i Tehnologii Informaionale

Raport
La lucrarea de laboratorul nr. 8
Tema: Proceduri stocate
La disciplina: Baze de date i cunotine

A efectuat studentul grupei TI-111 Voloceai Petru


A verificat Lector Superior Dorian Saranciuc

Chiinu 2014
Scopul lucrrii:
Studierea procedilor stocate

Sarcina:
1. Sa se creeze procedurile stocate in baza exercitiilor din capitolul 4. Parametrii de intrare trebuie sa
corespunda criteriilor din clauzele WHERE ale exercitiilor resprective.
2. Sa se creeze o procedura stocata care ar elimina toate produsele unui producator sau unul din tipurile
de produse ale acestui producator. In calitate de parametru de intrare, sa se ia numele producatorului
si tipul produsului.
3. Sa se creeze o procedura stocata care ar insera in baza de date un model nou de imprimanta. In cazul
in care datele inserate sunt incorecte sau incomplete, sa se afiseze un mesaj de avertizare. In calitate
de parametri de inatrare apar datele pentru modelul resprectiv.
4. Sa se creeze o procedura stocata care, in calitate de parametru de intare, sa aiba numarul de tipuri de
produse fabricate de un producator. In urma executarii procedurii, trebuie sa se afiseze un mesaj
informative, care sa include valaorea parametrului inserat si un table cu coloane Producator, Produs,
Nr_De_Modele pentru fiecare produs.
5. Sa se creeze o procedura stocata care ar calcula pretul ce trebuie sa-l achite cumparatorul in timnpul
promotiilor speciale la magazinul de calculatoare. Procedura va trebui sa calculeze pretul nou pentru
toate produsele unui anumit producator, in cazul cind se anunta promotia. Un comparator poate
procura deodata doar un singur model de produse, dar mai multe unitati de acest model. Reducerea
poate fi de citeva tipuri in functie de produsul, pretul initial si numarul de unitati de marfa.
In calitate de parameti de intrare se vor lua:
Modelul produsului procurat de cumparator;
Numarul de unitati de marfa procurata;
Procentul de reducare la pret in functie de unitati de marfa procurata;
Procentul de reducere la pret in dependenta de tipul de marfa procurata;
Procentul de reducre la pret in dependenta de pretul produsului fara reducere.
Astfel trebuie sa se afiseze Modelul, Tipul produsului, Producatorul, Pretul fara reducere, Pretul cu
reducere si Suma totatal spre achitare. Suma totatala spre achiatre trebuie sa tina cont de reducerile
calculate. Implicit asupra produselor procurate nu trebuie sa influienteze nici o reducere.
Efectuarea lucrrii:
1. Sa se creeze procedurile stocate in baza exercitiilor din capitolul 4. Parametrii de intrare trebuie sa
corespunda criteriilor din clauzele WHERE ale exercitiilor resprective.
USE calculatoare
GO
IF OBJECT_ID ('cerere1' ,'P') IS NOT NULL DROP PROCEDURE cerere1;
GO
CREATE PROCEDURE cerere1
@Pret FLOAT = 500
AS
SELECT Model, Viteza, Hd
FROM pc_uri
WHERE Pret < @Pret;
GO
EXECUTE cerere1;

Fig. 1.1 Rezultatele primei proceduri din sarcina nr. 1


USE calculatoare
GO
IF OBJECT_ID ('cerere2' ,'P') IS NOT NULL DROP PROCEDURE cerere2;
GO
CREATE PROCEDURE cerere2
@Tip VARCHAR(10) = 'Imprimante'
AS
SELECT Producator
FROM produse
WHERE Tip = @Tip
GO
EXECUTE cerere2;

Fig. 1.2 Rezultatele procedurii doi din sarcina nr. 1


USE calculatoare
GO
IF OBJECT_ID ('cerere3' ,'P') IS NOT NULL DROP PROCEDURE cerere3;
GO
CREATE PROCEDURE cerere3
@Pret FLOAT = 1000
AS
SELECT Model, Ram, Ecran
FROM laptop_uri
WHERE Pret > @Pret
GO
EXECUTE cerere3;

Fig. 1.3 Rezultatele procedurii trei din sarcina nr. 1


USE calculatoare
GO
IF OBJECT_ID ('cerere4' ,'P') IS NOT NULL DROP PROCEDURE cerere4;
GO
CREATE PROCEDURE cerere4
3

@Color CHAR(2) = 'da'


AS
SELECT *
FROM imprimante
WHERE Color = @Color
GO
EXECUTE cerere4;

Fig. 1.4 Rezultatele procedurii patru din sarcina nr. 1


USE calculatoare
GO
IF OBJECT_ID ('cerere5' ,'P') IS NOT NULL DROP PROCEDURE cerere5;
GO
CREATE PROCEDURE cerere5
@Pret FLOAT = 600,
@Cd VARCHAR(3) = '12x'
AS
SELECT Model, Viteza, Hd
FROM pc_uri
WHERE Pret < @Pret
AND Cd = @Cd
GO
EXECUTE cerere5;

Fig. 1.5 Rezultatele procedurii cinci din sarcina nr. 1


2. Sa se creeze o procedura stocata care ar elimina toate produsele unui producator sau unul din tipurile

de produse ale acestui producator. In calitate de parametru de intrare, sa se ia numele producatorului


si tipul produsului.
USE calculatoare
GO
IF OBJECT_ID ('eliminate' ,'P') IS NOT NULL DROP PROCEDURE eliminate;
GO
CREATE PROCEDURE eliminate
@Producator CHAR(1) = NULL,
@Tip VARCHAR(10) = NULL
AS
IF (@Tip = '*')
4

BEGIN
DELETE FROM produse
WHERE Producator = @Producator
AND Tip LIKE '%';
END;
ELSE
DELETE FROM produse
WHERE Producator = @Producator
AND Tip LIKE @Tip;
GO
/* DISPLAY TABLE BEFORE DELETING */
SELECT * FROM produse;
/* TO SELECT ALL TYPES INDICATE IN PARAMETERS '*' SYMBOL
WITH QUATES */
EXECUTE eliminate 'A', 'PC';
/* DISPLAY TABLE AFTER DELETING */
SELECT * FROM produse;

Fig. 2 Rezultatele procedurii din sarcina nr. 2


3. Sa se creeze o procedura stocata care ar insera in baza de date un model nou de imprimanta. In cazul

in care datele inserate sunt incorecte sau incomplete, sa se afiseze un mesaj de avertizare. In calitate
de parametri de inatrare apar datele pentru modelul resprectiv.
USE calculatoare
GO
IF OBJECT_ID ('insert_model' ,'P') IS NOT NULL DROP PROCEDURE insert_model;
GO
5

CREATE PROCEDURE insert_model


@Cod INT = NULL,
@Model VARCHAR(4) = NULL,
@Color CHAR(2) = NULL,
@Tip VARCHAR(6) = NULL,
@Pret FLOAT = NULL
AS
INSERT INTO imprimante
VALUES (@Cod, @Model, @Color, @Tip, @Pret);
IF @@ROWCOUNT = 1
BEGIN
PRINT 'Datele au fost inserate cu succes';
END;
ELSE IF @@ROWCOUNT = 0
BEGIN
PRINT 'AVERTIZARE! Datele sunt incorecte sau incomplete';
END;
GO
/* DISPLAY TABLE BEFORE INSERTING */
SELECT * FROM imprimante;
/* INSERT A ROW */
EXECUTE insert_model 10, 8888, 'da', 'Jet', 100;
/* DASPLAY TABLE AFTER INSERTING */
SELECT * FROM imprimante;
GO

Fig. 3.2 Mesajul procedurii din sarcina nr. 3

Fig. 3.1 Rezultatele procedurii din sarcina nr. 3


6

4. Sa se creeze o procedura stocata care, in calitate de parametru de intare, sa aiba numarul de tipuri de

produse fabricate de un producator. In urma executarii procedurii, trebuie sa se afiseze un mesaj


informativ, care sa includa valoarea parametrului inserat si un tabel cu coloane Producator, Produs,
Nr_De_Modele pentru fiecare produs.
USE calculatoare
GO
IF OBJECT_ID ('tip_count' ,'P') IS NOT NULL DROP PROCEDURE tip_count;
GO
CREATE PROCEDURE tip_count
@tipCount FLOAT = NULL
AS
PRINT 'Numarul de tipuri de produse fabricate de un producator este ' + CAST(@tipCount AS
VARCHAR(10)) + '.';
SELECT Producator, Tip, COUNT(Model) AS Nr_de_modele
FROM produse
GROUP BY Tip, Producator;
GO
DECLARE
@totalTipCount FLOAT;
SET @totalTipCount = (SELECT COUNT(Tip) AS Nr_de_tipuri
FROM produse
WHERE Producator = 'A');
EXECUTE tip_count @totalTipCount;
GO

Fig. 4 Rezultatele procedurii din sarcina nr. 4


5. Sa se creeze o procedura stocata care ar calcula pretul ce trebuie sa-l achite cumparatorul in timnpul

promotiilor speciale la magazinul de calculatoare. Procedura va trebui sa calculeze pretul nou pentru
toate produsele unui anumit producator, in cazul cind se anunta promotia. Un comparator poate
procura deodata doar un singur model de produse, dar mai multe unitati de acest model. Reducerea
poate fi de citeva tipuri in functie de produsul, pretul initial si numarul de unitati de marfa.
In calitate de parameti de intrare se vor lua:
Modelul produsului procurat de cumparator;
Numarul de unitati de marfa procurata;
Procentul de reducare la pret in functie de unitati de marfa procurata;
Procentul de reducere la pret in dependenta de tipul de marfa procurata;
Procentul de reducre la pret in dependenta de pretul produsului fara reducere.
7

Astfel trebuie sa se afiseze Modelul, Tipul produsului, Producatorul, Pretul fara reducere, Pretul cu
reducere si Suma totatal spre achitare. Suma totatala spre achiatre trebuie sa tina cont de reducerile
calculate. Implicit asupra produselor procurate nu trebuie sa influienteze nici o reducere.
USE calculatoare
GO
IF OBJECT_ID ('PAY_PRICE' ,'P') IS NOT NULL DROP PROCEDURE PAY_PRICE;
GO
CREATE PROCEDURE PAY_PRICE
@Model VARCHAR(4) = NULL,
@Units INT = NULL,
@DiscountUnits FLOAT = NULL,
@DiscountType VARCHAR(10) = NULL,
@DiscountPrice FLOAT = NULL
AS
BEGIN
DECLARE
@FinalPrice FLOAT = NULL,
@Type VARCHAR(10) = NULL,
@Price FLOAT = NULL,
@Discount FLOAT = 0
/* CALCULATE DISCOUNT BASED ON TYPE MODEL */
SET @Type = (SELECT Tip FROM produse WHERE Model = @Model)
IF (@DiscountType = @Type)
BEGIN
SET @Discount = 2;
SET @Price = (SELECT Pret FROM imprimante WHERE Model = @Model);
END
/* ADDING DISCOUNT BASED ON PRICE DISCOUNT */
IF (@Price >= 100 AND @Price < 250)
BEGIN
SET @Discount = @Discount + @DiscountPrice;
END
ELSE IF(@Price >= 250 AND @Price < 500)
BEGIN
SET @Discount = @Discount + @DiscountPrice * 2;
END
ELSE IF(@Price >= 500)
BEGIN
SET @Discount = @Discount + @DiscountPrice * 3;
END;
/* ADDING DISCOUNT BASED ON UNITS */
IF (@Units >= 3 AND @Units < 6)
BEGIN
SET @Discount = @Discount + @DiscountUnits;
END
ELSE IF (@Units >= 6 AND @Units < 15)
BEGIN
SET @Discount = @Discount + @DiscountUnits * 2;
END
8

ELSE IF (@Units >= 15 AND @Units < 30)


BEGIN
SET @Discount = @Discount + @DiscountUnits * 3;
END
SET @FinalPrice = @Price - (@Price * @Discount / 100);
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
EXECUTE PAY_PRICE '2222', 8, 2, 'Imprimante', 5;

Fig. 5 Rezultatele procedurii din sarcina nr. 5


6. Utilizarea procedurilor de sistem.

Fig. 6.1 Crearea unui nou login

Fig. 6.2 Obinerea informaiilor despre coloane dintr-un table

Fig. 6.3 Obine informaie despre previlegiile unui tabel


Concluzie.
In concluzie pot spune ca procedurile stocate este un instrument foarte util pentru a construi o baza
de date mai modulara, flexibila, pentru a efectua careva sarcini specifice. Procedurile pot fi apelate de alte
proceduri, si ele pot fi de doua tipuri:
- Function sunt proceduri care returneaza ceva.
- Procedure sunt proceduri care efectiuaza o sarcina careva dar nu returneaza nimic.

10