Sunteți pe pagina 1din 11

1.Să se creeze proceduri stocate în baza exercițiilor din lucrarea 4 .

Parametrii de intrare trebuie să


corespundă criteriilor din clauzele WHERE ale exercițiilor respective.
1)
CREATE PROCEDURE SelectPcUriByPrice
@MaxPrice INT
AS
BEGIN
-- Corpul procedurii
SELECT Model, Viteza, Hd
FROM pc_laptop.pc_uri
WHERE Pret < @MaxPrice;
END;

-- Apelarea procedurii stocate cu un anumit parametru


EXEC SelectPcUriByPrice @MaxPrice = 500;

2)
-- Crearea procedurii stocate
CREATE PROCEDURE SelectDistinctProducatorByTip
@Tip NVARCHAR(50)
AS
BEGIN
-- Corpul procedurii
SELECT DISTINCT Producator
FROM produse
WHERE Tip = @Tip;
END;

-- Apelarea procedurii stocate cu un anumit parametru


EXEC SelectDistinctProducatorByTip @Tip = 'Imprimante';

3)
-- Crearea procedurii stocate
CREATE PROCEDURE SelectLaptop
@PretMinim INT,
@DimensiuneEcran INT
AS
BEGIN
-- Corpul procedurii
SELECT Model, Ram, Ecran
FROM pc_laptop.laptop_uri
WHERE Pret > @PretMinim AND Ecran = @DimensiuneEcran;
END;

-- Apelarea procedurii stocate cu anumite valori pentru parametri


EXEC SelectLaptop @PretMinim = 1000, @DimensiuneEcran = 14;

4)
-- Crearea procedurii stocate
CREATE PROCEDURE SelectImprimanteByColor
@Color NVARCHAR(50)
AS
BEGIN
-- Corpul procedurii
SELECT *
FROM copiatoare.imprimante
WHERE Color = @Color;
END;

-- Apelarea procedurii stocate cu o anumită valoare pentru parametru


EXEC SelectImprimanteByColor @Color = 'da';

5)
-- Crearea procedurii stocate
CREATE PROCEDURE SelectImprimanteByTip
@TipImprimanta NVARCHAR(50)
AS
BEGIN
-- Corpul procedurii
SELECT *
FROM copiatoare.imprimante
WHERE Tip = @TipImprimanta;
END;

-- Apelarea procedurii stocate cu o anumită valoare pentru parametru


EXEC SelectImprimanteByTip @TipImprimanta = 'Laser';

6)
-- Crearea procedurii stocate
CREATE PROCEDURE SelectPcUriByHdCapacities
@CapacitateHd INT
AS
BEGIN
-- Corpul procedurii
SELECT *
FROM pc_laptop.pc_uri
WHERE Hd IN (8, 10, 14, 20);
END;

-- Apelarea procedurii stocate cu o anumită valoare pentru parametru


EXEC SelectPcUriByHdCapacities @CapacitateHd = 8;

7)
-- Crearea procedurii stocate
CREATE PROCEDURE PcUriByCriteria
@MaxPret INT,
@TipCd NVARCHAR(50)
AS
BEGIN
-- Corpul procedurii
SELECT DISTINCT Model, Viteza, Cd
FROM pc_laptop.pc_uri
WHERE pret < @MaxPret AND (Cd = @TipCd OR Cd = '24x');
END;

-- Apelarea procedurii stocate cu anumite valori pentru parametri


EXEC PcUriByCriteria @MaxPret = 600, @TipCd = '12x';

8)
-- Crearea procedurii stocate
CREATE PROCEDURE SelectPcUriRAMHd
@RAM INT,
@HdCapacity INT
AS
BEGIN
-- Corpul procedurii
SELECT model, RAM, Hd
FROM pc_laptop.pc_uri
WHERE (RAM IN (@RAM) AND Hd IN (@HdCapacity));
END;

-- Apelarea procedurii stocate cu anumite valori pentru parametri


EXEC SelectPcUriRAMHd @RAM = 64, @HdCapacity = 8;
9)
-- Crearea procedurii stocate
CREATE PROCEDURE LaptopUriModel
@PrefixModel NVARCHAR(50)
AS
BEGIN
-- Corpul procedurii
SELECT *
FROM pc_laptop.laptop_uri
WHERE model LIKE @PrefixModel + '%';
END;

-- Apelarea procedurii stocate cu un anumit prefix pentru model


EXEC LaptopUriModel @PrefixModel = '13';

10)
-- Crearea procedurii stocate
CREATE PROCEDURE ImprimanteModel
@ModelMinim NVARCHAR(50),
@ModelMaxim NVARCHAR(50)
AS
BEGIN
-- Corpul procedurii
SELECT *
FROM imprimante
WHERE model >= @ModelMinim AND model <= @ModelMaxim;
END;

-- Apelarea procedurii stocate cu un anumit interval pentru modele


EXEC ImprimanteModel @ModelMinim = '1400', @ModelMaxim = '1500';

2.w.
CREATE PROCEDURE EliminaProdusele
@NumeProducator CHAR(1),
@TipProdus VARCHAR(10)
AS
BEGIN
-- Verificăm dacă există parametrii validați
IF @NumeProducator IS NOT NULL OR @TipProdus IS NOT NULL
BEGIN
-- Eliminăm produsele în funcție de producător și/sau tip
DELETE FROM Stoc.Produse
WHERE (Producator = @NumeProducator OR @NumeProducator IS NULL)
AND (Tip = @TipProdus OR @TipProdus IS NULL);
-- Afisăm un mesaj de confirmare
PRINT 'Produse eliminate cu succes.';
END
ELSE
BEGIN
-- Afisăm un mesaj de eroare pentru parametrii nevalidați
PRINT 'Specificati cel putin un producator sau un tip de produs.';
END
END;

Baza de date noua are o eroere legata de cheia straina si nu executa aceste instructiuni . Am incercat sa
creez o baza de date noua ca sa veific si totul functioneaza
EXEC Elimina @NumeProducator = 'A', @TipProdus = 'PC';

3. Să se creeze o procedură stocată care ar insera în baza de date un model nou de imprimantă. În cazul
când datele inserate sunt incorecte sau incomplete, să se afişeze un mesaj de avertizare. În calitate de
parametri de intrare apar datele pentru modelul respectiv.

CREATE PROCEDURE InserareModelImprimanta


@Cod INT,
@Model VARCHAR(4),
@Color CHAR(2),
@Tip VARCHAR(6),
@Pret FLOAT
AS
BEGIN
-- Verificăm dacă datele sunt valide
IF @Cod IS NOT NULL AND @Model IS NOT NULL AND @Color IS NOT NULL AND @Tip IS NOT
NULL AND @Pret IS NOT NULL
BEGIN
-- Verificăm dacă modelul nu există deja
IF NOT EXISTS (SELECT 1 FROM imprimante WHERE Model = @Model)
BEGIN
-- Inserăm noul model
INSERT INTO imprimante (Cod, Model, Color, Tip, Pret)
VALUES (@Cod, @Model, @Color, @Tip, @Pret);

PRINT 'Modelul de imprimantă a fost inserat cu succes.';


END
ELSE
BEGIN
-- Afisăm un mesaj de avertizare pentru modelul existent
PRINT 'Modelul de imprimantă cu acest nume există deja.';
END
END
ELSE
BEGIN
-- Afisăm un mesaj de avertizare pentru datele incomplete sau incorecte
PRINT 'Datele introduse sunt incomplete sau incorecte. Modelul de imprimantă nu a
fost inserat.';
END
END;

SELECT*
FROM imprimante
WHERE Tip='Laser' OR Tip='Jet';
CREATE PROCEDURE InserareImprimanta
@Cod INT,
@Model VARCHAR(4),
@Color CHAR(2),
@Tip VARCHAR(6),
@Pret FLOAT
AS
BEGIN
-- Verificăm dacă datele sunt valide
IF @Cod IS NOT NULL AND @Model IS NOT NULL AND @Color IS NOT NULL AND @Tip IS NOT
NULL AND @Pret IS NOT NULL
BEGIN
-- Verificăm dacă modelul nu există deja
IF NOT EXISTS (SELECT 1 FROM copiatoare.imprimante WHERE Model = @Model)
BEGIN
-- Inserăm noul model
INSERT INTO copiatoare.imprimante(Cod, Model, Color, Tip, Pret)

VALUES (@Cod, @Model, @Color, @Tip, @Pret);

PRINT 'Modelul de imprimantă a fost inserat cu succes.';


END
ELSE
BEGIN
-- Afisăm un mesaj de avertizare pentru modelul existent
PRINT 'Modelul de imprimantă cu acest nume există deja.';
END
END
ELSE
BEGIN
-- Afisăm un mesaj de avertizare pentru datele incomplete sau incorecte
PRINT 'Datele introduse sunt incomplete sau incorecte. Modelul de imprimantă nu a
fost inserat.';
END
END;

Atunci cand utilizaez in baza de date initiala.

CORECT
CREATE PROCEDURE prc2
@Producator CHAR(1),
@Model VARCHAR(4),
@Tip VARCHAR(10)
AS
BEGIN
IF @Producator IS NULL OR @Model IS NULL OR @Tip IS NULL
BEGIN
PRINT 'Datele sunt incomplete sau incorecte. Verificați și completați toate
câmpurile.';
END

INSERT INTO produse(Producator, Model, Tip)


VALUES (@Producator, @Model, @Tip);
END;

-- Executarea procedurii stocate cu date incomplete


EXEC prc2 @Producator = 'A', @Model = '1200', @Tip = 'laser';

4.Să se creeze o procedură stocată care, în calitate de parametru de intrare, să aibă numărul de tipuri de
produse fabricate de un producător. În urma executării procedurii, trebuie să se afişeze un mesaj
informativ, care să includă valoarea parametrului inserat şi un tabel cu coloanele Producator, Produs,
Nr_De_Modele pentru fiecare tip de produs.
CREATE PROCEDURE NumarTipuriDeProduse
@Producator CHAR(1)
AS
BEGIN
-- Verificăm dacă producătorul există în tabelul Produse
IF EXISTS (SELECT 1 FROM Produse WHERE Producator = @Producator)
BEGIN
-- Afișăm mesaj informativ
PRINT 'Numărul de tipuri de produse pentru producătorul ' + @Producator + ':';

-- Afișăm tabelul cu informații


SELECT
p.Producator,
p.Model AS Produs,
COUNT(DISTINCT p.Tip) AS Nr_De_Modele
FROM
Produse p
WHERE
p.Producator = @Producator
GROUP BY
p.Producator, p.Model;

END
ELSE
BEGIN
-- Afișăm un mesaj de avertizare dacă producătorul nu există
PRINT 'Producătorul ' + @Producator + ' nu există în tabelul Produse.';
END
END;

----------
-- Apelarea procedurii cu un producător existent
EXEC NumarTipuriDeProduse @Producator = 'A';
5.Să se creeze o procedură stocată care ar calcula prețul ce trebuie să-l achite cumpărătorul în timpul
promoțiilor speciale la magazinul de calculatoare. Procedura va trebui să calculeze prețul nou pentru
toate produsele unui producător anumit, în cazul când se anunță promoția. Un cumpărător poate
procura deodată un singur model de produse, dar mai multe unități de acest model. Reducerea poate fi
de câteva tipuri în funcție de tipul produsului, prețul iniţial şi numărul de unități de marfă procurată.

În calitate de parametri de intrare, se vor lua:

⚫ modelul produsului procurat de cumpărător;

⚫ numărul de unități de marfă procurată;

procentul de reducere la preț în funcție de numărul de unități de marfă procurată; procentul de reducere
la preț în dependență de tipul de marfă procurată;

procentul de reducere la preț în dependență de prețul produsului fără reducere. Astfel, trebuie să se
afişeze Modelul, Tipul produsului, Producătorul, Prețul fără reducere, Prețul cu reducere şi Suma totală
spre achitare. Suma totală spre achitare trebuie să tină cont de reducerile calculate. Implicit asupra
produselor procurate nu trebuie sa influenţeze nici o reducere.

CREATE PROCEDURE CalculReducerePret


@Model VARCHAR(4),
@NumarUnitati INT,
@ProcentReducereUnitati DECIMAL(5,2),
@ProcentReducereTip DECIMAL(5,2),
@ProcentReducerePret DECIMAL(5,2)
AS
BEGIN
-- Verificăm dacă modelul există în tabelul Produse
IF EXISTS (SELECT 1 FROM Produse WHERE Model = @Model)
BEGIN
-- Declaram variabile pentru a stoca informatiile despre produs
DECLARE @TipProdus VARCHAR(10);
DECLARE @Producator CHAR(1);
DECLARE @PretFaraReducere FLOAT;
DECLARE @PretCuReducere FLOAT;

-- Obținem informații despre produs


SELECT
@TipProdus = Tip,
@Producator = Producator,
@PretFaraReducere = Pret
FROM
Stoc.Produse
WHERE
Model = @Model;

-- Calculăm prețul cu reducere


SET @PretCuReducere = CASE
WHEN @NumarUnitati >= 5 THEN @PretFaraReducere * (1 - @ProcentReducereUnitati
/ 100)
ELSE @PretFaraReducere
END * (1 - @ProcentReducereTip / 100) * (1 - @ProcentReducerePret / 100);

-- Calculăm suma totală spre achitare


DECLARE @SumaTotala FLOAT;
SET @SumaTotala = @NumarUnitati * @PretCuReducere;

-- Afișăm rezultatele
PRINT 'Detalii despre produs:';
PRINT 'Model: ' + @Model;
PRINT 'Tipul: ' + @TipProdus;
PRINT 'Producător: ' + @Producator;
PRINT 'Prețul fără reducere: ' + CAST(@PretFaraReducere AS VARCHAR);
PRINT 'Prețul cu reducere: ' + CAST(@PretCuReducere AS VARCHAR);
PRINT 'Suma totală spre achitare: ' + CAST(@SumaTotala AS VARCHAR);

END
ELSE
BEGIN
-- Afișăm un mesaj de avertizare dacă modelul nu există
PRINT 'Modelul ' + @Model + ' nu există în tabelul Produse.';
END
END;

Varainat functionala
CREATE PROCEDURE CalculeazaPretRedus
@Model varchar(4),
@NumarUnitati int,
@ProcentReducereNumarUnitati float,
@ProcentReducereTip float,
@ProcentReducerePret float
AS
BEGIN
DECLARE @PretFaraReducere float;
DECLARE @PretCuReducere float;
DECLARE @SumaTotala float;

-- Obține prețul fără reducere pentru modelul specificat


SELECT TOP 1 @PretFaraReducere = CASE
WHEN EXISTS (SELECT 1 FROM imprimante WHERE Model = @Model)
THEN (SELECT Pret FROM imprimante WHERE Model = @Model)
WHEN EXISTS (SELECT 1 FROM laptop_uri WHERE Model = @Model)
THEN (SELECT Pret FROM laptop_uri WHERE Model = @Model)
WHEN EXISTS (SELECT 1 FROM pc_uri WHERE Model = @Model)
THEN (SELECT Pret FROM pc_uri WHERE Model = @Model)
ELSE
NULL
END;

-- Calculează prețul cu reduceri


IF @PretFaraReducere IS NOT NULL
BEGIN
SET @PretCuReducere = @PretFaraReducere - (@PretFaraReducere *
@ProcentReducerePret / 100) -
(@PretFaraReducere * @ProcentReducereTip / 100) -
(@PretFaraReducere * @ProcentReducereNumarUnitati / 100);

SET @SumaTotala = @PretCuReducere * @NumarUnitati;

-- Afișează rezultatele
SELECT
Model,
Tip,
Producator,
@PretFaraReducere AS [Pret Fara Reducere],
@PretCuReducere AS [Pret Cu Reducere],
@SumaTotala AS [Suma Totala spre Achitare]
FROM Produse
WHERE Model = @Model;
END
ELSE
BEGIN
-- Afișează mesaj de eroare dacă modelul nu există în nicio categorie
PRINT 'Modelul specificat nu exista in nicio categorie.';
END
END;

Verificare
-- Exemplu de apel al procedurii pentru un model de imprimantă
EXEC CalculeazaPretRedus
@Model = '1276', -- Schimbă modelul în funcție de datele tale
@NumarUnitati = 3, -- Schimbă numărul de unități în funcție de datele tale
@ProcentReducereNumarUnitati = 5, -- Schimbă procentul de reducere în funcție de
datele tale
@ProcentReducereTip = 10, -- Schimbă procentul de reducere în funcție de datele tale
@ProcentReducerePret = 15; -- Schimbă procentul de reducere în funcție de datele tale

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