Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE TABLE REZERWACJE_LOG
- (
- ID INT GENERATED ALWAYS AS IDENTITY NOT NULL,
- ID_REZERWACJI INT,
- DATA DATE DEFAULT CURRENT_DATE,
- STATUS CHAR(1),
- CONSTRAINT REZERWACJE_LOG_PK PRIMARY KEY (ID) ENABLE,
- CONSTRAINT REZERWACJE_LOG_FK FOREIGN KEY (ID_REZERWACJI) REFERENCES REZERWACJE (NR_REZERWACJI) ENABLE
- );
- CREATE OR REPLACE PROCEDURE dodaj_rezerwacje(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));
- END;
- CREATE OR REPLACE PROCEDURE zmien_status_rezerwacji(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;
- END;
- CREATE OR REPLACE PROCEDURE zmien_liczbe_miejsc(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;
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement