Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE TRIGGER dodaj_rezerwacje_wolne_miejsca_trigger
  2.     BEFORE INSERT
  3.     ON REZERWACJE
  4.     FOR EACH ROW
  5. DECLARE
  6.     COUNT int;
  7. BEGIN
  8.     SELECT LICZBA_WOLNYCH_MIEJSC INTO COUNT FROM wycieczki_miejsca WHERE ID_WYCIECZKI = :NEW.ID_WYCIECZKI;
  9.     IF COUNT <= 0 THEN
  10.         RAISE_APPLICATION_ERROR(-20001, 'Brak wolnych miejsc');
  11.     END IF;
  12.     UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_WOLNYCH_MIEJSC - 1 WHERE ID_WYCIECZKI = :NEW.ID_WYCIECZKI;
  13. END;
  14.  
  15. CREATE OR REPLACE TRIGGER edytuj_rezerwacje_wolne_miejsca_trigger
  16.     BEFORE UPDATE
  17.     ON REZERWACJE
  18.     FOR EACH ROW
  19. DECLARE
  20.     COUNT int;
  21.     statusObecny CHAR;
  22.     idWycieczki int;
  23. BEGIN
  24.     SELECT statusObecny INTO statusObecny FROM REZERWACJE WHERE NR_REZERWACJI = :NEW.NR_REZERWACJI;
  25.     IF statusObecny = 'A' THEN
  26.         SELECT LICZBA_WOLNYCH_MIEJSC INTO COUNT FROM wycieczki_miejsca WHERE ID_WYCIECZKI = idWycieczki;
  27.         IF COUNT <= 0 THEN
  28.             RAISE_APPLICATION_ERROR(-20001, 'Brak wolnych miejsc');
  29.         END IF;
  30.         SELECT r.ID_WYCIECZKI INTO idWycieczki FROM REZERWACJE r WHERE r.NR_REZERWACJI = :NEW.NR_REZERWACJI;
  31.         UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_WOLNYCH_MIEJSC + 1 WHERE ID_WYCIECZKI = idWycieczki;
  32.     END IF;
  33. END;
  34.  
  35. CREATE OR REPLACE TRIGGER zmien_liczbe_miejsc_trigger
  36.     BEFORE UPDATE
  37.     ON WYCIECZKI
  38.     FOR EACH ROW
  39. DECLARE
  40.     COUNT int;
  41. BEGIN
  42.     IF NOT UPDATING ('LICZBA_MIEJSC') THEN
  43.         RETURN;
  44.     END IF;
  45.     SELECT LICZBA_MIEJSC - LICZBA_WOLNYCH_MIEJSC AS LICZBA_ZAJETYCH_MIEJSC
  46.     INTO COUNT
  47.     FROM wycieczki_miejsca
  48.     WHERE ID_WYCIECZKI = :NEW.ID_WYCIECZKI;
  49.     IF COUNT > :NEW.LICZBA_MIEJSC THEN
  50.         RAISE_APPLICATION_ERROR(-20001, 'Liczba zajetych miejsc wyższa od nowej liczby miejsc');
  51.     END IF;
  52. END;
  53.  
  54.  
  55. CREATE OR REPLACE PROCEDURE dodaj_rezerwacje_4(idWycieczki int, idOsoby int)
  56. AS
  57.     COUNT int;
  58.     dataWycieczki  DATE;
  59. BEGIN
  60.     SELECT COUNT(*) INTO COUNT FROM OSOBY WHERE ID_OSOBY = idOsoby;
  61.     IF COUNT = 0 THEN
  62.         RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono osoby o id=' || idOsoby);
  63.     END IF;
  64.     SELECT COUNT(*) INTO COUNT FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
  65.     IF COUNT = 0 THEN
  66.         RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono wycieczki o id =' || idWycieczki);
  67.     END IF;
  68.     SELECT DATA INTO dataWycieczki FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
  69.     IF dataWycieczki < CURRENT_DATE THEN
  70.         RAISE_APPLICATION_ERROR(-20001, 'Wycieczka juz sie odbyla');
  71.     END IF;
  72.     INSERT INTO REZERWACJE(ID_WYCIECZKI, ID_OSOBY, STATUS) VALUES (idWycieczki, idOsoby, 'N');
  73. END;
  74.  
  75. CREATE OR REPLACE PROCEDURE zmien_status_rezerwacji_4(idRezerwacji int, statusDocelowy CHAR)
  76. AS
  77.     COUNT  int;
  78.     statusObecny CHAR;
  79. BEGIN
  80.     SELECT COUNT(*) INTO COUNT FROM REZERWACJE WHERE NR_REZERWACJI = idRezerwacji;
  81.     IF COUNT = 0 THEN
  82.         RAISE_APPLICATION_ERROR(-20001, 'Rezerwacja o id=' || idRezerwacji || ' nie istnieje');
  83.     END IF;
  84.     UPDATE REZERWACJE SET STATUS = statusDocelowy WHERE NR_REZERWACJI = idRezerwacji;
  85. END;
  86.  
  87. CREATE OR REPLACE PROCEDURE zmien_liczbe_miejsc_2(idWycieczki int, docelowaLiczbaMiejsc int)
  88. AS
  89.     COUNT int;
  90. BEGIN
  91.     SELECT COUNT(*) INTO COUNT FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
  92.     IF COUNT = 0 THEN
  93.         RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono wycieczki o id = ' || idWycieczki);
  94.     END IF;
  95.     UPDATE WYCIECZKI SET LICZBA_MIEJSC = docelowaLiczbaMiejsc WHERE ID_WYCIECZKI = idWycieczki;
  96.     UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_MIEJSC - COUNT WHERE ID_WYCIECZKI = idWycieczki;
  97. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement