310


Katarzyna Świeczkowska

EiT K-1

nr 125462

SPRAWOZDANIE nr 5

(ćw. 4 NEW)

zad.1 (Stwórz funkcję o nazwie poletrojkata, która wyznaczy pole trójkąta ze wzoru 0.5*a*h, gdzie a jest podstawą a h wysokością trójkąta.)

CREATE FUNCTION poletrojkata (float, float) RETURNS float

LANGUAGE 'plpgsql'

AS '

BEGIN

RETURN 0.5*$1*$2;

END;

';

SELECT poletrojkata (a, h);

zad.2 (Stwórz funkcją, która wyznaczy deltę z równania kwadratowego.)

CREATE FUNCTION delta(float,float, float) RETURNS float

LANGUAGE 'plpgsql'

AS '

BEGIN

RETURN $2*$2-4*$1*$3;

END;

';

SELECT delta (a, b, c);

------------------------------------------------------

zad.1 (Stwórz funkcję i wyzwalacz, która przy próbie wypożyczenia płyty nie pozwoli wypożyczyć nowej płyty użytkownikowi, który ma 5 lub więcej niezwróconych pozycji.)


CREATE FUNCTION wypozyczenie() RETURNS TRIGGER AS '
BEGIN
IF (SELECT id_klienta FROM klient WHERE id_klienta=NEW.kto_wypozyczyl) IS NOT NULL THEN
IF (SELECT COUNT(co_wypozyczyl) FROM wypozyczenie WHERE kto_wypozyczyl=NEW.kto_wypozyczyl) < 5 THEN
RETURN NEW;
ELSE
RAISE NOTICE ''Limit wypozyczen wyczerpany'';
RETURN NULL;
END IF;
ELSE
RAISE NOTICE ''Nie ma takiego klienta w bazie'';
RETURN NULL;
END IF;
END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER trigger_max BEFORE INSERT ON wypozyczenie FOR EACH ROW EXECUTE PROCEDURE wypozyczenie();


zad.2 (Opisz wszystkie tabele stosownymi komentarzami)


COMMENT ON TABLE klient IS 'Wszyscy Klienci w bazie';
COMMENT ON TABLE Gatunek IS 'Gatunki';
COMMENT ON TABLE plyta IS 'Dostepne tytuly';
COMMENT ON TABLE wypozyczenie IS 'Historia wypożyczeń';
COMMENT ON TABLE jest_pracownikiem IS ' To jest tabela przechowująca listę pracownikow, umozliwia uzyskanie specjalnego rabatu.';


zad.3 (Stwórz funkcję, która pozwoli sprawdzić i naliczyć karę użytkownikowi za zbyt długie przetrzymywanie płyty. Jeżeli przekracza ono 2 tygodnie to za każdy dzień dolicz 10 pln.)


CREATE OR REPLACE FUNCTION zwrot() RETURNS TRIGGER AS '
DECLARE
x int2;
y date;
kara float4;
okres CONSTANT interval:=336;
oplata CONSTANT integer:=10;
BEGIN
y = (SELECT data_wypozyczenia FROM wypozyczenie WHERE co_wypozyczyl = OLD.co_wypozyczyl) + okres;
IF y < current_date THEN
x = current_date - y;
kara = x * oplata;
RAISE NOTICE ''Klient przekroczyl termin oddania plyty o % dni'',x;
RAISE NOTICE ''Plyta zostala oddana'';
RAISE NOTICE ''Kara za przetrzymanie wynosi % zl'',kara;
RETURN OLD;
ELSE

RAISE NOTICE ''Klient nie przekroczyl terminu oddania plyty'';
RAISE NOTICE ''Plyta zostala oddana'';
RAISE NOTICE ''Kara za przetrzymanie wynosi 0 zl'';
RETURN OLD;
END IF;
END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER t_zwrot BEFORE DELETE ON wypozyczenie FOR EACH ROW EXECUTE PROCEDURE zwrot();


zad.4 (Wewnątrz transakcji dodaj nowego użytkownika i informację, że jest on pracownikiem, przewidź rabat 50%.)


Begin;
INSERT INTO klient(imie,nazwisko) VALUES ('IMIE','NAZWISKO');
INSERT INTO jest_pracownikiem(rabat,id_klienta) VALUES ('50',(SELECT id_klienta FROM klient WHERE imie = 'IMIE' AND nazwisko= 'NAZWISKO'));
COMMIT;



Wyszukiwarka

Podobne podstrony:
How the ABI Prism 310 Genetic Analyzer Works
Datasheet SL20 310
instrukcja obslugi do zestawu g o nom wi cego Nokia HF 310 PL
kk, ART 310 KK, Wyrok z dnia 10 lipca 2007 r
310, 310
310
310 Manuskrypt przetrwania
310, ZiIP Politechnika Poznańska, Fizyka II, Ćwiczenia
310
20030901224912id$310 Nieznany
310 311 id 35012 Nieznany
310 03
plik (310)
310, Polibuda, studia, S12, Fiza, Lab, Fizyka- laboratoria, Laborki- inne1
Instrukcja CTX 310 & Fanuc21i
DU035 04 310
PN 310
opty 310, studia, semestr II, SEMESTR 2 PRZYDATNE (od Klaudii), FIZYKA DO MOICH LABOREK, fizyka 13

więcej podobnych podstron