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