Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE TRIGGER dodaj_rezerwacje_wolne_miejsca_trigger
- BEFORE INSERT
- ON REZERWACJE
- FOR EACH ROW
- DECLARE
- COUNT int;
- BEGIN
- SELECT LICZBA_WOLNYCH_MIEJSC INTO COUNT FROM wycieczki_miejsca WHERE ID_WYCIECZKI = :NEW.ID_WYCIECZKI;
- IF COUNT <= 0 THEN
- RAISE_APPLICATION_ERROR(-20001, 'Brak wolnych miejsc');
- END IF;
- UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_WOLNYCH_MIEJSC - 1 WHERE ID_WYCIECZKI = :NEW.ID_WYCIECZKI;
- END;
- CREATE OR REPLACE TRIGGER edytuj_rezerwacje_wolne_miejsca_trigger
- BEFORE UPDATE
- ON REZERWACJE
- FOR EACH ROW
- DECLARE
- COUNT int;
- statusObecny CHAR;
- idWycieczki int;
- BEGIN
- SELECT statusObecny INTO statusObecny FROM REZERWACJE WHERE NR_REZERWACJI = :NEW.NR_REZERWACJI;
- IF statusObecny = 'A' THEN
- 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;
- SELECT r.ID_WYCIECZKI INTO idWycieczki FROM REZERWACJE r WHERE r.NR_REZERWACJI = :NEW.NR_REZERWACJI;
- UPDATE WYCIECZKI SET LICZBA_WOLNYCH_MIEJSC = LICZBA_WOLNYCH_MIEJSC + 1 WHERE ID_WYCIECZKI = idWycieczki;
- END IF;
- END;
- CREATE OR REPLACE TRIGGER zmien_liczbe_miejsc_trigger
- BEFORE UPDATE
- ON WYCIECZKI
- FOR EACH ROW
- DECLARE
- COUNT int;
- BEGIN
- IF NOT UPDATING ('LICZBA_MIEJSC') THEN
- RETURN;
- END IF;
- SELECT LICZBA_MIEJSC - LICZBA_WOLNYCH_MIEJSC AS LICZBA_ZAJETYCH_MIEJSC
- INTO COUNT
- FROM wycieczki_miejsca
- WHERE ID_WYCIECZKI = :NEW.ID_WYCIECZKI;
- IF COUNT > :NEW.LICZBA_MIEJSC THEN
- RAISE_APPLICATION_ERROR(-20001, 'Liczba zajetych miejsc wyższa od nowej liczby miejsc');
- END IF;
- END;
- CREATE OR REPLACE PROCEDURE dodaj_rezerwacje_4(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;
- INSERT INTO REZERWACJE(ID_WYCIECZKI, ID_OSOBY, STATUS) VALUES (idWycieczki, idOsoby, 'N');
- END;
- CREATE OR REPLACE PROCEDURE zmien_status_rezerwacji_4(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;
- UPDATE REZERWACJE SET STATUS = statusDocelowy WHERE NR_REZERWACJI = idRezerwacji;
- 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;
- 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