Studia podyplomowe

Transkrypt

Studia podyplomowe
ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH
MS SQL Server 2008
Zadanie 1
Napisz procedurę, która wyznaczy klientów, którzy złożyli więcej niż N zamówień. Wartość N powinna stanowić
parametr wejściowy procedury. Procedura powinna wypisać id_klienta, imię, nazwisko oraz liczbę zamówień.
CREATE PROCEDURE pokaz_klientow_N
@N int
AS
BEGIN
SELECT ...
HAVING ... > @N;
END
GO
Wywołanie procedury:
DECLARE @N int
SET @N = 1
USE Sklep;
EXECUTE pokaz_klientow_N @N;
Zadanie 2
Napisz procedurę z następującymi parametrami: paramter wejściowy id_produktu i parametr wyjściowy X,
którego wartość zostanie wyznaczona w procedurze. Parametr X powinien stanowić procent sprzedaży, jaką
stanowi sprzedaż produktu o podanym identyfikatorze do wszystkich sprzedanych produktów (bierzemy pod
uwagę wartość sprzedaży, a nie jej ilość).
CREATE PROCEDURE wyznacz_procent_produkt
@id_produktu smallint,
@procent float OUT
AS
BEGIN
Zaawansowane bazy danych i hurtownie danych | PS7
SET @procent =
CAST(
( SELECT SUM(...)
...
AND Produkt.id_produktu=@id_produktu )
as float)/
CAST(
( SELECT SUM(...)
...)
as float)*100;
END
GO
Wywołanie procedury:
USE Sklep;
DECLARE @x float;
EXECUTE wyznacz_procent 1, @x OUTPUT;
PRINT @x;
GO
Zadanie 3
Napisz procedurę, która dla każdego klienta wyznaczy procent wartości jego wszystkich zamówień do wartości
wszystkich zamówień w sklepie. Procedura powinna wypisać imię i nazwisko klienta oraz procent.
CREATE PROCEDURE wyznacz_procent_klient
AS
DECLARE k CURSOR FOR
SELECT imie, nazwisko, SUM(Pozycje_Zamowienia.ilosc*cena)
...;
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
BEGIN
END
GO
@imie varchar(20);
@nazwisko varchar(20);
@suma float;
@calkowita_wartosc float;
@procent float;
SET @calkowita_wartosc = (...);
OPEN k;
FETCH NEXT FROM k INTO @imie, @nazwisko, @suma
WHILE @@FETCH_STATUS = 0
BEGIN
SET @procent = CAST(@suma/@calkowita_wartosc*100 as float)
PRINT @imie+' '+@nazwisko+' '+cast(@procent as varchar)
FETCH NEXT FROM k INTO @imie, @nazwisko, @suma
END
CLOSE k
DEALLOCATE k;
Zaawansowane bazy danych i hurtownie danych | PS7
Zadanie 4
Napisz wyzwalacz, który przy dodawaniu rekordu do tabeli Pozycje_Zamowienia będzie automatycznie
aktualizować stany magazynowe odpowiedniego produktu w tabeli Produkt.
CREATE TRIGGER stany_magazynowe ON Pozycje_Zamowienia
FOR INSERT AS
declare @id_produktu smallint;
declare @ilosc_zamawiana smallint;
declare @ilosc_magazynowa smallint;
SET @id_produktu = (SELECT inserted.id_produktu FROM inserted);
SET @ilosc_zamawiana = (SELECT inserted.ilosc FROM inserted);
SET @ilosc_magazynowa = (...);
IF @ilosc_magazynowa > @ilosc_zamawiana
UPDATE Produkt SET ilosc = ... WHERE ...;
ELSE
UPDATE Produkt SET ilosc = ... WHERE ...;
GO
Zadanie 5
Napisz funkcję, która wyznaczy całkowitą wartość wszystkich zamówień klienta o podanym identyfikatorze.
CREATE FUNCTION Wartosc_zamowien_klienta(@id_klienta SMALLINT) RETURNS FLOAT
AS
BEGIN
DECLARE @wartosc FLOAT;
SET @wartosc = (...);
RETURN @wartosc
END
GO
Wywołanie funkcji:
use Sklep;
declare @x float;
execute @x = Wartosc_zamowien_klienta 1;
print @x;
POMOC
CREATE PROCEDURE nazwa_procedury
@nazwa_parametru typ_parametru,
@nazwa_parametru_wyjsciowego typ_parametru OUT
AS
BEGIN
ciało procedury
END
GO
CREATE FUNCTION nazwa_funkcji(
@nazwa_parametru typ_parametru,
@nazwa_parametru_wyjsciowego typ_parametru OUT, ...)
RETURNS return_data_type
AS
BEGIN
END
GO
ciało funkcji
Zaawansowane bazy danych i hurtownie danych | PS7