sprawko BD, WAT, semestr III, Bazy danych


W O J S K O W A A K A D E M I A T E C H N I C Z N A

L A B O R A T O R I U M B A Z D A N Y C H

SPRAWOZDANIE

Z ĆWICZENIA LABORATORYJNEGO

Temat ćwiczenia: Baza danych: Salon samochodowy

Ćwiczenie wykonał: Michał Grzelak

grupa: C04E

Data wykonania ćwiczenia: 04.06.2006

1. Triggery

Zmien_fakture_cz - uaktualnia fakturę o sumę pieniędzy po zmianie pozycji w tabeli Zak_cz

ALTER TRIGGER "Zmien_fakture_cz" after UPDATE on tZak_cz

for each row

BEGIN

DECLARE kursor CURSOR FOR SELECT Nr_ser FROM tZak_cz ORDER BY Nr_ser;

DECLARE @zm int;

DECLARE kursor2 CURSOR FOR SELECT Nr_faktury FROM tFaktury;

DECLARE @zm2 int;

OPEN kursor;

p1 : LOOP

FETCH NEXT kursor INTO @zm;

IF SQLCODE <> 0 THEN

LEAVE p1;

END IF;

UPDATE tZak_cz

SET Cena_cz = Ilosc * (SELECT Cena FROM tCzesci WHERE Nr_ser=@zm)

WHERE Nr_ser = @zm;

END LOOP p1;

CLOSE kursor;

UPDATE tFaktury

SET Suma = 0;

OPEN kursor2;

p1 : LOOP

FETCH NEXT kursor2 INTO @zm2;

IF SQLCODE <> 0 THEN

LEAVE p1;

END IF;

UPDATE tFaktury

SET Suma = Suma + ISNULL((SELECT SUM(Cena_cz) FROM tZak_cz WHERE Nr_faktury = @zm2),0) + ISNULL((SELECT SUM(Cena_s) FROM tZak_s WHERE Nr_faktury = @zm2),0)

WHERE Nr_faktury = @zm2;

END LOOP p1;

CLOSE kursor2;

END

Zmien_fakture_s - uaktualnia fakturę o sumę pieniędzy po zmianie pozycji w tabeli Zak_s

ALTER TRIGGER "Zmien_fakture_s" after UPDATE on tZak_s

for each row

BEGIN

DECLARE kursor CURSOR FOR SELECT Nr_seryjny FROM tZak_s ORDER BY Nr_seryjny;

DECLARE @zm int;

DECLARE kursor2 CURSOR FOR SELECT Nr_faktury FROM tFaktury;

DECLARE @zm2 int;

OPEN kursor;

p1:

LOOP

FETCH NEXT kursor INTO @zm;

IF SQLCODE <> 0 THEN

LEAVE p1;

END IF;

UPDATE tZak_s

SET Cena_s = (SELECT Cena FROM tAuta WHERE Nr_seryjny=@zm)

WHERE Nr_seryjny = @zm;

END LOOP p1;

CLOSE kursor;

UPDATE tFaktury

SET Suma = 0;

OPEN kursor2;

p1:

LOOP

FETCH NEXT kursor2 INTO @zm2;

IF SQLCODE <> 0 THEN

LEAVE p1;

END IF;

UPDATE tFaktury

SET Suma = Suma + ISNULL((SELECT SUM(Cena_cz) FROM tZak_cz WHERE Nr_faktury = @zm2),0) + ISNULL((SELECT SUM(Cena_s) FROM tZak_s WHERE Nr_faktury = @zm2),0)

WHERE Nr_faktury = @zm2;

END LOOP p1;

CLOSE kursor2;

END

Zmien_stan - uaktualnia stan auta (sprzedany/dostępny) z salonu po jego dodaniu do faktury w tabeli tFaktury (czyli sprzedaży)

ALTER TRIGGER "Zmien_stan" after INSERT on tFaktury

for each row

BEGIN

DECLARE kursor CURSOR FOR SELECT Nr_seryjny FROM tAuta;

DECLARE @zm int;

OPEN kursor;

p1:

LOOP

FETCH NEXT kursor INTO @zm;

IF SQLCODE <> 0 THEN

LEAVE p1;

END IF;

if exists (SELECT Nr_seryjny FROM tZak_s WHERE Nr_seryjny=@zm) then

UPDATE tAuta

SET Stan = 0

WHERE Nr_ser = @zm;

end if;

END LOOP p1;

CLOSE kursor;

END

Wstaw_promocje - łączy promocje z autami w salonie w tabeli Promocje_w_autach po

dodaniu promocje do tabeli tPromocje

ALTER TRIGGER "Wstaw_promocje" after UPDATE, INSERT, DELETE on tPromocje for each row

BEGIN

declare Szukaj_prom cursor for select Id_prom, Dotyczy_modelu from tPromocje;

declare Szukaj_aut cursor for select Nr_seryjny, Model from tAuta;

declare temp_prom int;

declare temp_auto int;

declare temp_model varchar(10);

declare temp_model2 varchar(10);

delete from Promocje_w_autach where 1=1;

open Szukaj_prom;

open Szukaj_aut;

petla1 : LOOP --początek pętli

fetch next Szukaj_prom into temp_prom, temp_model;

IF SQLCODE <> 0 THEN leave petla1;

end if;

petla2 : LOOP

fetch next Szukaj_aut into temp_auto, temp_model2;

IF SQLCODE <> 0 THEN leave petla2;

end if;

if temp_model = temp_model2 then

insert into Promocje_w_autach values (temp_prom,temp_auto);

end if;

end LOOP;

fetch first Szukaj_aut into temp_auto, temp_model2;

end LOOP;

close Szukaj_aut;

close Szukaj_prom;

END

2. Widoki

Aktualne_promocje - wyświetla aktualne promocje dostępne przy zakupie auta w salonie

ALTER VIEW "DBA"."Aktualne promocje"()

AS

SELECT "DBA"."tPromocje"."Id_prom",

"DBA"."tPromocje"."Typ_promocji",

"DBA"."tPromocje"."Dotyczy_modelu",

"DBA"."tPromocje"."Wartosc"

FROM "DBA"."tPromocje"

WHERE "DBA"."tPromocje"."Data_do" > getdate()

Najlepsze_promocje - wyświetla najbardziej opłacalną kombinację promocji dla modelu

samochodu „Vectra”

ALTER VIEW "DBA"."Najlepsze_promocje"()

AS

SELECT DISTINCT TOP 2 Typ_promocji, Wartosc FROM tPromocje WHERE Dotyczy_modelu = 'Vectra' ORDER BY Wartosc DESC

Najlepsze_promocje - wyświetla zestawienie który pracownik sprzedał który samochód

ALTER VIEW "DBA"."Pracownicy"()

AS

SELECT "DBA"."tPracownicy"."Id",

"DBA"."tPracownicy"."Imię",

"DBA"."tPracownicy"."Nazwisko",

"DBA"."tAuta"."Nr_seryjny",

"DBA"."tAuta"."Rocznik",

"DBA"."tAuta"."Model",

"DBA"."tAuta"."Cena"

FROM ( "DBA"."tPracownicy" CROSS JOIN "DBA"."tAuta" ) JOIN "DBA"."tPrac_auta" ON "DBA"."tAuta"."Nr_seryjny" = "DBA"."tPrac_auta"."Nr_seryjny" and "DBA"."tPracownicy"."Id" = "DBA"."tPrac_auta"."Id"

WHERE "DBA"."tPracownicy"."Dział" = 'Auta'

ORDER BY "DBA"."tPracownicy"."Id" ASC

Vectry - wyświetla samochodowy modelu „Vectra”, których cena jest mniejsza od 86000 zł.

oraz są dostępne

ALTER VIEW "DBA"."Vectry"( )

AS

SELECT "DBA"."tAuta"."Rocznik",

"DBA"."tAuta"."Kolor",

"DBA"."tAuta"."Wersja",

"DBA"."tAuta"."Cena"

FROM "DBA"."tAuta"

WHERE "DBA"."tAuta"."Cena" < 86000 AND Stan = 1 AND Model = 'Vectra'

3. Procedury

Dodaj_promocje - dodaje promocję z wprowadzonymi danymi, jeżeli taka promocja już

istnieje procedura wyświetla odpowiednią informację

ALTER PROCEDURE "DBA"."Dodaj_promocje" (in typ varchar(15), in model char(10), in wart numeric(6,2))

BEGIN

declare @Id_prom bigint;

declare dzis date;

set dzis=getdate();

select max(Id_prom) into @Id_prom from tPromocje;

set @Id_prom=@Id_prom+1;

if exists (select * from tPromocje where Dotyczy_modelu = model and Typ_promocji = typ) then

message 'Taka promocja juz istnieje' type action to client;

else

insert into tPromocje values (typ,model,@Id_prom,dzis,dateadd(day,60,dzis),wart);

end if;

END

Uaktualnij_promocje - uaktualnia wybraną promocję zmieniając jej Data_od na aktualną datę,

a Data_do na 60 dni po aktualnej dacie

ALTER PROCEDURE "DBA"."Uaktualnij_promocje"(in typ varchar(15))

BEGIN

declare dzis date;

set dzis=getdate();

if exists(select * from tPromocje where Typ_promocji = typ) then

update tPromocje set Data_od = dzis, Data_do = dateadd(day,60,dzis) where Typ_promocji = typ;

else

message 'Nie ma takiej promocji' type action to client;

end if;

END

Ile_sprzedali - wyświetla pracowników malejąco wg ilości sprzedanych samochodów,

korzysta z funkcji Ile_sprzedal, która zwraca ilość sprzedanych aut przez pracownika

ALTER PROCEDURE "DBA"."Ile_sprzedali"()

BEGIN

DECLARE @zm int;

DECLARE @zm2 varchar(15);

DECLARE @zm3 varchar(25);

DECLARE kursor CURSOR FOR SELECT "Id", Nazwisko, Imie FROM tPracownicy WHERE Dział = 'Klienci';

CREATE TABLE test (Nazwisko varchar(25), Imie varchar(15), "Ile sprzedał" int);

OPEN kursor;

p1 : LOOP

FETCH NEXT kursor INTO @zm, @zm3, @zm2;

IF SQLCODE <> 0 THEN

LEAVE p1;

END IF;

INSERT INTO test VALUES(@zm3, @zm2, Ile_sprzedal(@zm));

END LOOP p1;

CLOSE kursor;

SELECT * FROM test ORDER BY "Ile sprzedał" DESC;

DROP TABLE test;

END

Ile_wydali - wyświetla malejąco trzech klientów, którzy wydali w salonie najwięcej,

wg wydanej sumy pieniędzy

ALTER PROCEDURE "DBA"."Ile_wydali"()

BEGIN

DECLARE @zm int;

DECLARE @zm2 varchar(15);

DECLARE @zm3 varchar(25);

DECLARE kursor CURSOR FOR SELECT Id_klienta, Nazwisko, Imie FROM tKlienci;

CREATE TABLE test (Nazwisko varchar(25), Imie varchar(15), Kwota numeric (8,2));

OPEN kursor;

p1:

LOOP

FETCH NEXT kursor INTO @zm, @zm3, @zm2;

IF SQLCODE <> 0 THEN

LEAVE p1;

END IF;

INSERT INTO test VALUES(@zm3, @zm2, Ile_wydal(@zm));

END LOOP p1;

CLOSE kursor;

SELECT DISTINCT TOP 3 * FROM test ORDER BY Kwota DESC;

DROP TABLE test;

END

4. Funkcje

Dochod - zwraca sumę pieniędzy zarobioną przez firmę w ciągu ostatniego miesiąca, czyli suma ze sprzedanych aut minus koszt dostawy oraz wynagrodzenia dla pracowników

ALTER FUNCTION "DBA"."Dochod"()

RETURNS numeric(8,2)

DETERMINISTIC

BEGIN

DECLARE suma numeric(8,2);

DECLARE wydatki numeric(8,2);

DECLARE przychod numeric(8,2);

DECLARE dzis date;

SET dzis = getdate();

SET wydatki = (SELECT sum(Wynagrodzenie) FROM tPracownicy) + (SELECT sum(Suma) FROM tDostawy WHERE ("Data" > dateadd(month,-1,dzis)));

SET przychod = (SELECT sum(Suma) FROM tFaktury WHERE ("Data" > dateadd(month,-1,dzis)));

SET suma = przychod - wydatki;

Message suma type action to client;

RETURN suma;

END

Ile_sprzedal - zwraca ilość aut sprzedanych przez pracownika o danym Id

ALTER FUNCTION "DBA"."Ile_sprzedal"(IN "@Id" int)

RETURNS integer

DETERMINISTIC

BEGIN

DECLARE ile integer;

SET ile = (SELECT COUNT(*) FROM tKlienci WHERE "Id" = "@Id");

RETURN ile;

END

Ile_wydal - zwraca sumę pieniędzy wydanych w salonie przez klienta o danym numerze

ALTER FUNCTION "DBA"."Ile_wydal"(IN klient integer)

RETURNS numeric(8,2)

DETERMINISTIC

BEGIN

DECLARE @ile_wydal numeric(8,2);

SET @ile_wydal = (SELECT SUM(Suma) FROM tFaktury WHERE Id_klienta=klient);

RETURN @ile_wydal;

END

Koszt_pracowników - zwraca całkowity koszt pracowników z tytuły wynagrodzeń od

początku ich zatrudnienia

ALTER FUNCTION "DBA"."Koszt_pracownikow"( /* [IN] parameter_name parameter_type [DEFAULT default_value], ... */ )

RETURNS numeric(8,2)

DETERMINISTIC

BEGIN

DECLARE koszt numeric(8,2);

DECLARE kursor CURSOR FOR SELECT Wynagrodzenie, Pracuje_od FROM tPracownicy;

DECLARE @zm numeric(8,2);

DECLARE @zm1 date;

SET koszt = 0;

OPEN kursor;

p1:

LOOP

FETCH NEXT kursor INTO @zm, @zm1;

IF SQLCODE <> 0 THEN

LEAVE p1;

END IF;

SET koszt = (koszt + @zm*datediff(month,@zm1,getdate()));

END LOOP p1;

CLOSE kursor;

Message koszt type action to client;

RETURN koszt;

END



Wyszukiwarka

Podobne podstrony:
bd wyklad1, WAT, semestr III, Bazy danych
bdsciaga, WAT, semestr III, Bazy danych
bdsprawko, WAT, semestr III, Bazy danych
pytania, WAT, semestr III, Bazy danych
caerm, WAT, semestr III, Bazy danych
ASO kolo test, WAT, semestr III, Bazy danych
5 Zadania PL-SQL1a, WAT, semestr III, Bazy danych
5 2 PLSQL-Basic, WAT, semestr III, Bazy danych
sprawozdanie SKLEP SPOŻYWCZY Rafał Sylwestrzuk(1), WAT, semestr III, Bazy danych
wyrazenia, WAT, semestr III, Bazy danych
5 1 TRG, WAT, semestr III, Bazy danych
bdsprawko(2), WAT, semestr III, Bazy danych
moja, WAT, semestr III, Bazy danych
sciaga bazd danych, WAT, semestr III, Bazy danych

więcej podobnych podstron