Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE TYPE OSOBA AS OBJECT
  2. (
  3.     ID_WYCIECZKI INT,
  4.     NAZWA        VARCHAR2(100),
  5.     KRAJ         VARCHAR2(50),
  6.     DATA         DATE,
  7.     IMIE         VARCHAR2(50),
  8.     NAZWISKO     VARCHAR2(50),
  9.     STATUS       CHAR(1)
  10. );
  11. CREATE OR REPLACE TYPE WYCIECZKA AS OBJECT
  12. (
  13.     ID_WYCIECZKI  INT,
  14.     NAZWA         VARCHAR2(100),
  15.     KRAJ          VARCHAR2(50),
  16.     DATA          DATE,
  17.     OPIS          VARCHAR2(200),
  18.     LICZBA_MIEJSC INT
  19. );
  20. CREATE OR REPLACE TYPE OSOBY_TABLE AS TABLE OF OSOBA;
  21. CREATE OR REPLACE TYPE WYCIECZKA_TABLE AS TABLE OF WYCIECZKA;
  22.  
  23. CREATE FUNCTION uczestnicy_wycieczki(idWycieczki int) RETURN OSOBY_TABLE
  24. AS
  25.     result OSOBY_TABLE;
  26.         exist INTEGER;
  27. BEGIN
  28.     SELECT COUNT(*) INTO exist FROM WYCIECZKI WHERE ID_WYCIECZKI = idWycieczki;
  29.     IF exist = 0 THEN
  30.         RAISE_APPLICATION_ERROR(-20001, 'Nie znaleziono wycieczki o id =' || idWycieczki);
  31.     END IF;
  32.  
  33.     SELECT OSOBA(w.KRAJ, w.DATA, w.NAZWA, o.IMIE,
  34.                              o.NAZWISKO, r.STATUS)
  35.         BULK COLLECT INTO result
  36.     FROM WYCIECZKI w
  37.            JOIN REZERWACJE r ON w.ID_WYCIECZKI = r.ID_WYCIECZKI
  38.            JOIN OSOBY o ON r.ID_OSOBY = o.ID_OSOBY
  39.     WHERE w.ID_WYCIECZKI = idWycieczki AND (r.STATUS = 'P' OR r.STATUS = 'Z');
  40.     RETURN result;
  41. END uczestnicy_wycieczki;
  42.  
  43. CREATE OR REPLACE
  44. FUNCTION rezerwacje_osoby(id_osoby OSOBY.ID_OSOBY%TYPE)
  45.   RETURN OSOBY_TABLE AS result OSOBY_TABLE;
  46.   exist INTEGER;
  47.   BEGIN
  48.     SELECT COUNT(*) INTO exist FROM OSOBY WHERE OSOBY.ID_OSOBY = rezerwacje_osoby.id_osoby;
  49.  
  50.     IF exist = 0 THEN
  51.       raise_application_error(-20002, 'Nie znaleziono osoby o podanym id:');
  52.     END IF;
  53.  
  54.     SELECT OSOBY(w.KRAJ, w.DATA, w.NAZWA, o.IMIE,
  55.                              o.NAZWISKO, r.STATUS)
  56.         BULK COLLECT INTO result
  57.     FROM WYCIECZKI w
  58.            JOIN REZERWACJE r ON w.ID_WYCIECZKI = r.ID_WYCIECZKI
  59.            JOIN OSOBY o ON r.ID_OSOBY = o.ID_OSOBY
  60.     WHERE o.ID_OSOBY = rezerwacje_osoby.id_osoby AND r.STATUS <> 'A';
  61.     RETURN result;
  62.   END rezerwacje_osoby;
  63.  
  64.  
  65. CREATE OR REPLACE
  66. FUNCTION przyszle_rezerwacje_osoby(id_osoby OSOBY.ID_OSOBY%TYPE)
  67.   RETURN OSOBY_TABLE AS result OSOBY_TABLE;
  68.   exist INTEGER;
  69.   BEGIN
  70.     SELECT COUNT(*) INTO exist FROM OSOBY WHERE OSOBY.ID_OSOBY = przyszle_rezerwacje_osoby.id_osoby;
  71.  
  72.     IF exist = 0
  73.     THEN
  74.       raise_application_error(-20002, 'Brak osoby o podanym id');
  75.     END IF;
  76.  
  77.     SELECT OSOBA(w.KRAJ, w.DATA, w.NAZWA, o.IMIE,
  78.                              o.NAZWISKO, r.STATUS)
  79.         BULK COLLECT INTO result
  80.     FROM WYCIECZKI w
  81.            JOIN REZERWACJE r ON w.ID_WYCIECZKI = r.ID_WYCIECZKI
  82.            JOIN OSOBY o ON r.ID_OSOBY = o.ID_OSOBY
  83.     WHERE o.ID_OSOBY = przyszle_rezerwacje_osoby.id_osoby
  84.       AND r.STATUS = 'P' OR r.STATUS = 'Z'
  85.       AND w.DATA > CURRENT_DATE;
  86.     RETURN result;
  87.   END przyszle_rezerwacje_osoby;
  88.  
  89. CREATE OR REPLACE
  90. FUNCTION dostepne_wycieczki(kraj WYCIECZKI.KRAJ%TYPE, data_od DATE,
  91.                             data_do DATE)
  92.   RETURN WYCIECZKA_TABLE AS result WYCIECZKA_TABLE;
  93.   BEGIN
  94.     IF data_do < data_od
  95.     THEN
  96.       raise_application_error(-20003, 'Nieprawidłowy przedział dat');
  97.     END IF;
  98.  
  99.     SELECT WYCIECZKA(w.ID_WYCIECZKI, w.NAZWA, w.KRAJ, w.DATA, w.OPIS,
  100.                        w.LICZBA_MIEJSC)
  101.         BULK COLLECT INTO result
  102.     FROM WYCIECZKI w
  103.     WHERE w.KRAJ = dostepne_wycieczki.kraj
  104.       AND w.DATA >= data_od
  105.       AND w.DATA <= data_do
  106.       AND w.LICZBA_MIEJSC > (SELECT COUNT(*)
  107.                              FROM REZERWACJE r
  108.                              WHERE r.status <> 'A'
  109.                                AND r.ID_WYCIECZKI = w.ID_WYCIECZKI);
  110.     RETURN result;
  111.   END dostepne_wycieczki;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement