Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Zadanie 3.38 */
- DECLARE
- ile_przel NUMBER(2):=&liczba_przelozonych;
- max_przel NUMBER(2);
- licznik NUMBER(3);
- zapytanie VARCHAR2(1000);
- wiersz VARCHAR2(500);
- top_line VARCHAR2(500);
- second_line VARCHAR2(500);
- TYPE kursor_type IS REF CURSOR;
- kursor kursor_type;
- licz_przel_mn_zero EXCEPTION;
- BEGIN
- DBMS_OUTPUT.PUT_LINE('Przyklady dla liczba przelozonych: ' || ile_przel);
- --obsluga wyjatku
- IF ile_przel<0
- THEN RAISE licz_przel_mn_zero;
- END IF;
- --sprawdzamy, ile moze byc maksymalnie przelozonych
- SELECT MAX(LEVEL)-1 INTO max_przel
- FROM Kocury
- CONNECT BY PRIOR pseudo = szef
- START WITH pseudo = 'TYGRYS';
- --w razie potrzeby modyfikujemy liczbe przelozonych
- IF ile_przel > max_przel THEN
- ile_przel := max_przel;
- END IF;
- --inicjalizujemy i aktualizujemy zapytanie oraz toplines
- top_line := 'IMIE ';
- second_line := '---------------';
- zapytanie := 'SELECT rpad(K1.imie, 15)';
- FOR licznik IN 1..ile_przel
- LOOP
- zapytanie := zapytanie || '|| '' | '' || rpad(NVL(K' || (licznik+1) || '.imie, '' ''), 15)';
- top_line := top_line || ' | SZEF ' || licznik || ' ';
- second_line := second_line || '------------------';
- END LOOP;
- --end for
- zapytanie := zapytanie || ' FROM Kocury K1';
- FOR licznik IN 1..ile_przel
- LOOP
- zapytanie := zapytanie || ' LEFT JOIN Kocury K' || (licznik+1) ||
- ' ON K' || licznik || '.szef = K' || (licznik + 1) || '.pseudo';
- END LOOP;
- --end for
- zapytanie := zapytanie || ' WHERE K1.funkcja = ''KOT'' OR K1.funkcja = ''MILUSIA''';
- --test
- --DBMS_OUTPUT.PUT_LINE(zapytanie);
- --wykonanie zapytania
- DBMS_OUTPUT.PUT_LINE(top_line);
- DBMS_OUTPUT.PUT_LINE(second_line);
- OPEN kursor FOR zapytanie;
- LOOP
- FETCH kursor INTO wiersz;
- EXIT WHEN kursor%NOTFOUND;
- DBMS_OUTPUT.PUT_LINE(wiersz);
- END LOOP;
- CLOSE kursor;
- EXCEPTION
- WHEN licz_przel_mn_zero
- THEN DBMS_OUTPUT.PUT_LINE('Liczba przelozonych musi byc wieksza od zera!');
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement