Advertisement
Guest User

Untitled

a guest
Dec 20th, 2015
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Zadanie 3.38 */
  2. DECLARE
  3.   ile_przel     NUMBER(2):=&liczba_przelozonych;
  4.   max_przel     NUMBER(2);  
  5.   licznik       NUMBER(3);
  6.   zapytanie     VARCHAR2(1000);
  7.   wiersz        VARCHAR2(500);
  8.   top_line      VARCHAR2(500);
  9.   second_line   VARCHAR2(500);
  10.  
  11.   TYPE kursor_type IS REF CURSOR;
  12.   kursor kursor_type;
  13.   licz_przel_mn_zero EXCEPTION;
  14.  
  15. BEGIN
  16.  
  17.   DBMS_OUTPUT.PUT_LINE('Przyklady dla liczba przelozonych: ' ||  ile_przel);
  18.  
  19.   --obsluga wyjatku
  20.   IF ile_przel<0
  21.     THEN RAISE licz_przel_mn_zero;
  22.   END IF;
  23.  
  24.   --sprawdzamy, ile moze byc maksymalnie przelozonych
  25.   SELECT MAX(LEVEL)-1 INTO max_przel
  26.     FROM Kocury
  27.     CONNECT BY PRIOR pseudo = szef
  28.     START WITH pseudo = 'TYGRYS';
  29.   --w razie potrzeby modyfikujemy liczbe przelozonych
  30.   IF ile_przel > max_przel THEN  
  31.     ile_przel := max_przel;
  32.   END IF;
  33.  
  34.   --inicjalizujemy i aktualizujemy zapytanie oraz toplines
  35.   top_line := 'IMIE           ';
  36.   second_line := '---------------';
  37.   zapytanie := 'SELECT rpad(K1.imie, 15)';
  38.   FOR licznik IN 1..ile_przel
  39.     LOOP
  40.       zapytanie := zapytanie || '|| '' | '' || rpad(NVL(K' || (licznik+1) || '.imie, '' ''), 15)';
  41.       top_line := top_line || ' | SZEF ' || licznik || '         ';
  42.       second_line := second_line || '------------------';
  43.     END LOOP;
  44.   --end for
  45.   zapytanie := zapytanie || ' FROM Kocury K1';
  46.   FOR licznik IN 1..ile_przel
  47.     LOOP
  48.       zapytanie := zapytanie || ' LEFT JOIN Kocury K' || (licznik+1) ||
  49.         ' ON K' || licznik || '.szef = K' || (licznik + 1) || '.pseudo';
  50.     END LOOP;
  51.   --end for
  52.   zapytanie := zapytanie || ' WHERE K1.funkcja = ''KOT'' OR K1.funkcja = ''MILUSIA''';
  53.  
  54.   --test
  55.   --DBMS_OUTPUT.PUT_LINE(zapytanie);
  56.  
  57.   --wykonanie zapytania
  58.   DBMS_OUTPUT.PUT_LINE(top_line);
  59.   DBMS_OUTPUT.PUT_LINE(second_line);
  60.   OPEN kursor FOR zapytanie;
  61.   LOOP
  62.     FETCH kursor INTO wiersz;
  63.     EXIT WHEN kursor%NOTFOUND;
  64.     DBMS_OUTPUT.PUT_LINE(wiersz);
  65.   END LOOP;
  66.   CLOSE kursor;
  67.  
  68. EXCEPTION
  69.   WHEN licz_przel_mn_zero
  70.     THEN DBMS_OUTPUT.PUT_LINE('Liczba przelozonych musi byc wieksza od zera!');
  71. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement