Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ALTER TABLE WYCIECZKI
- ADD LICZBA_WOLNYCH_MIEJSC INT;
- CREATE VIEW wycieczki_miejsca_2
- AS
- SELECT ID_WYCIECZKI,NAZWA,
- KRAJ,DATA,
- LICZBA_MIEJSC,
- LICZBA_WOLNYCH_MIEJSC
- FROM WYCIECZKI;
- CREATE VIEW dostepne_wycieczki_2
- AS
- SELECT ID_WYCIECZKI,
- NAZWA,
- KRAJ,
- DATA,
- LICZBA_MIEJSC,
- LICZBA_WOLNYCH_MIEJSC
- FROM WYCIECZKI
- WHERE LICZBA_WOLNYCH_MIEJSC > 0
- AND DATA > CURRENT_DATE;
- CREATE OR REPLACE PROCEDURE przelicz AS
- BEGIN
- UPDATE WYCIECZKI w
- SET LICZBA_WOLNYCH_MIEJSC = LICZBA_MIEJSC - (SELECT COUNT(*)
- FROM REZERWACJE r
- WHERE r.ID_WYCIECZKI = w.ID_WYCIECZKI
- AND r.STATUS != 'A');
- END;
- CREATE OR REPLACE PROCEDURE dodaj_rezerwacje_2(idWycieczki int, idOsoby int)
- AS
- COUNT int;
- dataWycieczki DATE;
- BEGIN
- SELECT COUNT(*) INTO COUNT FROM OSOBY WHERE ID_OSOBY = idOsoby;
- IF COUNT = 0 THEN
- RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono osoby o id=' || idOsoby);
- END IF;
- SELECT COUNT(*) INTO COUNT FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
- IF COUNT = 0 THEN
- RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono wycieczki o id =' || idWycieczki);
- END IF;
- SELECT DATA INTO dataWycieczki FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
- IF dataWycieczki < CURRENT_DATE THEN
- RAISE_APPLICATION_ERROR(-20001, 'Wycieczka juz sie odbyla');
- END IF;
- SELECT LICZBA_WOLNYCH_MIEJSC INTO COUNT FROM wycieczki_miejsca WHERE ID_WYCIECZKI = idWycieczki;
- IF COUNT <= 0 THEN
- RAISE_APPLICATION_ERROR(-20001, 'Brak wolnych miejsc');
- END IF;
- INSERT INTO REZERWACJE(ID_WYCIECZKI, ID_OSOBY, STATUS) VALUES (idWycieczki, idOsoby, 'N');
- INSERT INTO REZERWACJE_LOG(ID_REZERWACJI, STATUS)
- VALUES ((SELECT ID_REZERWACJI FROM REZERWACJE WHERE ID_WYCIECZKI = idWycieczki AND ID_OSOBY = idOsoby),
- (SELECT STATUS FROM REZERWACJE WHERE ID_WYCIECZKI = idWycieczki AND ID_OSOBY = idOsoby));
- UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_WOLNYCH_MIEJSC - 1 WHERE ID_WYCIECZKI = idWycieczki;
- END;
- CREATE OR REPLACE PROCEDURE zmien_status_rezerwacji_2(idRezerwacji int, statusDocelowy CHAR)
- AS
- COUNT int;
- statusObecny CHAR;
- BEGIN
- SELECT COUNT(*) INTO COUNT FROM REZERWACJE WHERE NR_REZERWACJI = idRezerwacji;
- IF COUNT = 0 THEN
- RAISE_APPLICATION_ERROR(-20001, 'Rezerwacja o id=' || idRezerwacji || ' nie istnieje');
- END IF;
- SELECT STATUS INTO statusObecny FROM REZERWACJE WHERE NR_REZERWACJI = idRezerwacji;
- IF statusObecny = 'A' THEN
- SELECT LICZBA_WOLNYCH_MIEJSC INTO COUNT FROM wycieczki_miejsca
- WHERE ID_WYCIECZKI = (SELECT r.ID_WYCIECZKI FROM REZERWACJE r WHERE r.NR_REZERWACJI = idRezerwacji);
- IF COUNT <= 0 THEN
- RAISE_APPLICATION_ERROR(-20001, 'Brak wolnych miejsc');
- END IF;
- END IF;
- INSERT INTO REZERWACJE_LOG(ID_REZERWACJI, STATUS) VALUES (idRezerwacji, statusDocelowy);
- UPDATE REZERWACJE SET STATUS = statusDocelowy WHERE NR_REZERWACJI = idRezerwacji;
- IF statusDocelowy = 'A' THEN
- UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_WOLNYCH_MIEJSC + 1
- WHERE ID_WYCIECZKI = (SELECT ID_WYCIECZKI FROM REZERWACJE WHERE NR_REZERWACJI = idRezerwacji);
- ELSE
- UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_WOLNYCH_MIEJSC - 1
- WHERE ID_WYCIECZKI = (SELECT ID_WYCIECZKI FROM REZERWACJE WHERE NR_REZERWACJI = idRezerwacji);
- END IF;
- END;
- CREATE OR REPLACE PROCEDURE zmien_liczbe_miejsc_2(idWycieczki int, docelowaLiczbaMiejsc int)
- AS
- COUNT int;
- BEGIN
- SELECT COUNT(*) INTO COUNT FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
- IF COUNT = 0 THEN
- RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono wycieczki o id = ' || idWycieczki);
- END IF;
- SELECT LICZBA_MIEJSC - LICZBA_WOLNYCH_MIEJSC AS LICZBA_ZAJETYCH_MIEJSC INTO COUNT FROM wycieczki_miejsca
- WHERE ID_WYCIECZKI = idWycieczki;
- IF COUNT > docelowaLiczbaMiejsc THEN
- RAISE_APPLICATION_ERROR(-20001, 'Przekroczono docelową ilość miejsc');
- END IF;
- UPDATE WYCIECZKI SET LICZBA_MIEJSC = docelowaLiczbaMiejsc WHERE ID_WYCIECZKI = idWycieczki;
- UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_MIEJSC - COUNT WHERE ID_WYCIECZKI = idWycieczki;
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement