Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE TABLE REZERWACJE_LOG
  2. (
  3.     ID            INT GENERATED ALWAYS AS IDENTITY NOT NULL,
  4.     ID_REZERWACJI INT,
  5.     DATA          DATE DEFAULT CURRENT_DATE,
  6.     STATUS        CHAR(1),
  7.     CONSTRAINT REZERWACJE_LOG_PK PRIMARY KEY (ID) ENABLE,
  8.     CONSTRAINT REZERWACJE_LOG_FK FOREIGN KEY (ID_REZERWACJI) REFERENCES REZERWACJE (NR_REZERWACJI) ENABLE
  9. );
  10.  
  11. CREATE OR REPLACE PROCEDURE dodaj_rezerwacje(idWycieczki int, idOsoby int)
  12. AS
  13.     COUNT int;
  14.     dataWycieczki  DATE;
  15. BEGIN
  16.     SELECT COUNT(*) INTO COUNT FROM OSOBY WHERE ID_OSOBY = idOsoby;
  17.     IF COUNT = 0 THEN
  18.         RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono osoby o id=' || idOsoby);
  19.     END IF;
  20.     SELECT COUNT(*) INTO COUNT FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
  21.     IF COUNT = 0 THEN
  22.         RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono wycieczki o id =' || idWycieczki);
  23.     END IF;
  24.     SELECT DATA INTO dataWycieczki FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
  25.     IF dataWycieczki < CURRENT_DATE THEN
  26.         RAISE_APPLICATION_ERROR(-20001, 'Wycieczka juz sie odbyla');
  27.     END IF;
  28.     SELECT LICZBA_WOLNYCH_MIEJSC INTO COUNT FROM wycieczki_miejsca WHERE ID_WYCIECZKI = idWycieczki;
  29.     IF COUNT <= 0 THEN
  30.         RAISE_APPLICATION_ERROR(-20001, 'Brak wolnych miejsc');
  31.     END IF;
  32.     INSERT INTO REZERWACJE(ID_WYCIECZKI, ID_OSOBY, STATUS) VALUES (idWycieczki, idOsoby, 'N');
  33.     INSERT INTO REZERWACJE_LOG(ID_REZERWACJI, STATUS)
  34.     VALUES ((SELECT ID_REZERWACJI FROM REZERWACJE WHERE ID_WYCIECZKI = idWycieczki AND ID_OSOBY = idOsoby),
  35.             (SELECT STATUS FROM REZERWACJE WHERE ID_WYCIECZKI = idWycieczki AND ID_OSOBY = idOsoby));
  36. END;
  37.  
  38. CREATE OR REPLACE PROCEDURE zmien_status_rezerwacji(idRezerwacji int, statusDocelowy CHAR)
  39. AS
  40.     COUNT  int;
  41.     statusObecny CHAR;
  42. BEGIN
  43.     SELECT COUNT(*) INTO COUNT FROM REZERWACJE WHERE NR_REZERWACJI = idRezerwacji;
  44.     IF COUNT = 0 THEN
  45.         RAISE_APPLICATION_ERROR(-20001, 'Rezerwacja o id=' || idRezerwacji || ' nie istnieje');
  46.     END IF;
  47.     SELECT STATUS INTO statusObecny FROM REZERWACJE WHERE NR_REZERWACJI = idRezerwacji;
  48.     IF statusObecny = 'A' THEN
  49.         SELECT LICZBA_WOLNYCH_MIEJSC INTO COUNT FROM wycieczki_miejsca
  50.         WHERE ID_WYCIECZKI = (SELECT r.ID_WYCIECZKI FROM REZERWACJE r WHERE r.NR_REZERWACJI = idRezerwacji);
  51.         IF COUNT <= 0 THEN
  52.             RAISE_APPLICATION_ERROR(-20001, 'Brak wolnych miejsc');
  53.         END IF;
  54.     END IF;
  55.     INSERT INTO REZERWACJE_LOG(ID_REZERWACJI, STATUS) VALUES (idRezerwacji, statusDocelowy);
  56.     UPDATE REZERWACJE SET STATUS = statusDocelowy WHERE NR_REZERWACJI = idRezerwacji;
  57. END;
  58.  
  59. CREATE OR REPLACE PROCEDURE zmien_liczbe_miejsc(idWycieczki int, docelowaLiczbaMiejsc int)
  60. AS
  61.     COUNT int;
  62. BEGIN
  63.     SELECT COUNT(*) INTO COUNT FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
  64.     IF COUNT = 0 THEN
  65.         RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono wycieczki o id = ' || idWycieczki);
  66.     END IF;
  67.  
  68.     SELECT LICZBA_MIEJSC - LICZBA_WOLNYCH_MIEJSC AS LICZBA_ZAJETYCH_MIEJSC INTO COUNT FROM wycieczki_miejsca
  69.     WHERE ID_WYCIECZKI = idWycieczki;
  70.     IF COUNT > docelowaLiczbaMiejsc THEN
  71.         RAISE_APPLICATION_ERROR(-20001, 'Przekroczono docelową ilość miejsc');
  72.     END IF;
  73.     UPDATE WYCIECZKI SET LICZBA_MIEJSC = docelowaLiczbaMiejsc WHERE ID_WYCIECZKI = idWycieczki;
  74. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement