Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ALTER TABLE WYCIECZKI
  2.     ADD LICZBA_WOLNYCH_MIEJSC INT;
  3.  
  4. CREATE VIEW wycieczki_miejsca_2
  5. AS
  6. SELECT ID_WYCIECZKI,NAZWA,
  7.        KRAJ,DATA,
  8.        LICZBA_MIEJSC,
  9.        LICZBA_WOLNYCH_MIEJSC
  10. FROM WYCIECZKI;
  11.  
  12. CREATE VIEW dostepne_wycieczki_2
  13. AS
  14. SELECT ID_WYCIECZKI,
  15.        NAZWA,
  16.        KRAJ,
  17.        DATA,
  18.        LICZBA_MIEJSC,
  19.        LICZBA_WOLNYCH_MIEJSC
  20. FROM WYCIECZKI
  21. WHERE LICZBA_WOLNYCH_MIEJSC > 0
  22.   AND DATA > CURRENT_DATE;
  23.  
  24. CREATE OR REPLACE PROCEDURE przelicz AS
  25.   BEGIN
  26.     UPDATE WYCIECZKI w
  27.     SET LICZBA_WOLNYCH_MIEJSC = LICZBA_MIEJSC - (SELECT COUNT(*)
  28.                                                  FROM REZERWACJE r
  29.                                                  WHERE r.ID_WYCIECZKI = w.ID_WYCIECZKI
  30.                                                    AND r.STATUS != 'A');
  31.   END;
  32.  
  33. CREATE OR REPLACE PROCEDURE dodaj_rezerwacje_2(idWycieczki int, idOsoby int)
  34. AS
  35.     COUNT int;
  36.     dataWycieczki  DATE;
  37. BEGIN
  38.     SELECT COUNT(*) INTO COUNT FROM OSOBY WHERE ID_OSOBY = idOsoby;
  39.     IF COUNT = 0 THEN
  40.         RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono osoby o id=' || idOsoby);
  41.     END IF;
  42.     SELECT COUNT(*) INTO COUNT FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
  43.     IF COUNT = 0 THEN
  44.         RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono wycieczki o id =' || idWycieczki);
  45.     END IF;
  46.     SELECT DATA INTO dataWycieczki FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
  47.     IF dataWycieczki < CURRENT_DATE THEN
  48.         RAISE_APPLICATION_ERROR(-20001, 'Wycieczka juz sie odbyla');
  49.     END IF;
  50.     SELECT LICZBA_WOLNYCH_MIEJSC INTO COUNT FROM wycieczki_miejsca WHERE ID_WYCIECZKI = idWycieczki;
  51.     IF COUNT <= 0 THEN
  52.         RAISE_APPLICATION_ERROR(-20001, 'Brak wolnych miejsc');
  53.     END IF;
  54.     INSERT INTO REZERWACJE(ID_WYCIECZKI, ID_OSOBY, STATUS) VALUES (idWycieczki, idOsoby, 'N');
  55.     INSERT INTO REZERWACJE_LOG(ID_REZERWACJI, STATUS)
  56.     VALUES ((SELECT ID_REZERWACJI FROM REZERWACJE WHERE ID_WYCIECZKI = idWycieczki AND ID_OSOBY = idOsoby),
  57.             (SELECT STATUS FROM REZERWACJE WHERE ID_WYCIECZKI = idWycieczki AND ID_OSOBY = idOsoby));
  58.     UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_WOLNYCH_MIEJSC - 1 WHERE ID_WYCIECZKI = idWycieczki;
  59. END;
  60.  
  61. CREATE OR REPLACE PROCEDURE zmien_status_rezerwacji_2(idRezerwacji int, statusDocelowy CHAR)
  62. AS
  63.     COUNT  int;
  64.     statusObecny CHAR;
  65. BEGIN
  66.     SELECT COUNT(*) INTO COUNT FROM REZERWACJE WHERE NR_REZERWACJI = idRezerwacji;
  67.     IF COUNT = 0 THEN
  68.         RAISE_APPLICATION_ERROR(-20001, 'Rezerwacja o id=' || idRezerwacji || ' nie istnieje');
  69.     END IF;
  70.     SELECT STATUS INTO statusObecny FROM REZERWACJE WHERE NR_REZERWACJI = idRezerwacji;
  71.     IF statusObecny = 'A' THEN
  72.         SELECT LICZBA_WOLNYCH_MIEJSC INTO COUNT FROM wycieczki_miejsca
  73.         WHERE ID_WYCIECZKI = (SELECT r.ID_WYCIECZKI FROM REZERWACJE r WHERE r.NR_REZERWACJI = idRezerwacji);
  74.         IF COUNT <= 0 THEN
  75.             RAISE_APPLICATION_ERROR(-20001, 'Brak wolnych miejsc');
  76.         END IF;
  77.     END IF;
  78.     INSERT INTO REZERWACJE_LOG(ID_REZERWACJI, STATUS) VALUES (idRezerwacji, statusDocelowy);
  79.     UPDATE REZERWACJE SET STATUS = statusDocelowy WHERE NR_REZERWACJI = idRezerwacji;
  80.     IF statusDocelowy = 'A' THEN
  81.         UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_WOLNYCH_MIEJSC + 1
  82.         WHERE ID_WYCIECZKI = (SELECT ID_WYCIECZKI FROM REZERWACJE  WHERE NR_REZERWACJI = idRezerwacji);
  83.         ELSE
  84.         UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_WOLNYCH_MIEJSC - 1
  85.         WHERE ID_WYCIECZKI = (SELECT ID_WYCIECZKI FROM REZERWACJE  WHERE NR_REZERWACJI = idRezerwacji);
  86.     END IF;
  87. END;
  88.  
  89. CREATE OR REPLACE PROCEDURE zmien_liczbe_miejsc_2(idWycieczki int, docelowaLiczbaMiejsc int)
  90. AS
  91.     COUNT int;
  92. BEGIN
  93.     SELECT COUNT(*) INTO COUNT FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
  94.     IF COUNT = 0 THEN
  95.         RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono wycieczki o id = ' || idWycieczki);
  96.     END IF;
  97.  
  98.     SELECT LICZBA_MIEJSC - LICZBA_WOLNYCH_MIEJSC AS LICZBA_ZAJETYCH_MIEJSC INTO COUNT FROM wycieczki_miejsca
  99.     WHERE ID_WYCIECZKI = idWycieczki;
  100.     IF COUNT > docelowaLiczbaMiejsc THEN
  101.         RAISE_APPLICATION_ERROR(-20001, 'Przekroczono docelową ilość miejsc');
  102.     END IF;
  103.     UPDATE WYCIECZKI SET LICZBA_MIEJSC = docelowaLiczbaMiejsc WHERE ID_WYCIECZKI = idWycieczki;
  104.     UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_MIEJSC - COUNT WHERE ID_WYCIECZKI = idWycieczki;
  105. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement