Advertisement
Guest User

Untitled

a guest
Apr 11th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 5.86 KB | None | 0 0
  1. --ZADANIE 1--
  2. DECLARE
  3.   CURSOR cursor_zad1_pracownik IS
  4.     SELECT p.nazwisko, p.pobory, p.premia
  5.       FROM pracownicy_07 p ORDER BY p.nazwisko;
  6.   stosunek NUMBER;
  7. BEGIN
  8.   FOR pracownik IN cursor_zad1_pracownik LOOP
  9.     stosunek := pracownik.pobory / pracownik.premia;
  10.     DBMS_OUTPUT.PUT_LINE(pracownik.nazwisko||' | '||stosunek);
  11.   END LOOP;
  12.   EXCEPTION
  13.     WHEN ZERO_DIVIDE THEN
  14.       DBMS_OUTPUT.PUT_LINE('Dzielenie przez 0!');
  15. END;
  16.  
  17. --ZADANIE 2--
  18. DECLARE
  19.   CURSOR cursor_zad1_pracownik IS
  20.     SELECT p.nazwisko, p.pobory, p.premia
  21.       FROM pracownicy_07 p ORDER BY p.nazwisko;
  22.   stosunek NUMBER;
  23. BEGIN
  24.   FOR pracownik IN cursor_zad1_pracownik LOOP
  25.     BEGIN
  26.       stosunek := pracownik.pobory / pracownik.premia;
  27.       DBMS_OUTPUT.PUT_LINE(pracownik.nazwisko||' | '||stosunek);
  28.       EXCEPTION
  29.       WHEN ZERO_DIVIDE THEN
  30.         DBMS_OUTPUT.PUT_LINE('Dzielenie przez 0!');
  31.     END;
  32.   END LOOP;
  33. END;
  34.  
  35. --ZADANIE 3--
  36. CREATE OR REPLACE PROCEDURE zadanie3(par_id VARCHAR2) AS
  37. pracownik pracownicy_07%ROWTYPE;
  38. BEGIN
  39.   SELECT * INTO pracownik FROM pracownicy_07 p WHERE p.pracownik_id = par_id;
  40.   DBMS_OUTPUT.PUT_LINE(pracownik.imie||' | '||pracownik.nazwisko||' | '||pracownik.pobory||' | '||pracownik.dzial_id);
  41.   EXCEPTION
  42.     WHEN NO_DATA_FOUND THEN
  43.       DBMS_OUTPUT.PUT_LINE('Nie znaleziono!');
  44.     WHEN INVALID_NUMBER THEN
  45.       DBMS_OUTPUT.PUT_LINE('Zly parametr!');
  46.     WHEN VALUE_ERROR THEN
  47.       DBMS_OUTPUT.PUT_LINE('Bledna wartosc!');
  48.     WHEN OTHERS THEN
  49.       DBMS_OUTPUT.PUT_LINE('Jakis inny blad!');
  50. END;
  51.  
  52. BEGIN
  53.   zadanie3(120);
  54. END;
  55.  
  56. --ZADANIE 4--
  57. CREATE OR REPLACE PROCEDURE zadanie4(par_id VARCHAR2) AS
  58. pracownik pracownicy_07%ROWTYPE;
  59. BRAK_PREMII EXCEPTION;
  60. PRAGMA exception_init (BRAK_PREMII, -20000);
  61. BEGIN
  62.   SELECT * INTO pracownik FROM pracownicy_07 p WHERE p.pracownik_id = par_id;
  63.   IF pracownik.premia = 0 THEN
  64.     raise_application_error(-20000, 'Brak premii!');
  65.   END IF;
  66.   DBMS_OUTPUT.PUT_LINE(pracownik.imie||' | '||pracownik.nazwisko||' | '||pracownik.pobory||' | '||pracownik.dzial_id);
  67.   EXCEPTION
  68.     WHEN NO_DATA_FOUND THEN
  69.       DBMS_OUTPUT.PUT_LINE('Nie znaleziono!');
  70.     WHEN INVALID_NUMBER THEN
  71.       DBMS_OUTPUT.PUT_LINE('Zly parametr!');
  72.     WHEN VALUE_ERROR THEN
  73.       DBMS_OUTPUT.PUT_LINE('Bledna wartosc!');
  74.     WHEN BRAK_PREMII THEN
  75.       DBMS_OUTPUT.PUT_LINE('Brak premii!');
  76.     WHEN OTHERS THEN
  77.       DBMS_OUTPUT.PUT_LINE('Jakis inny blad!');
  78. END;
  79.  
  80. BEGIN
  81.   zadanie4(120);
  82. END;
  83.  
  84. --ZADANIE 5--
  85. CREATE OR REPLACE PROCEDURE zadanie5(par_id_dzial VARCHAR2) AS  
  86.   CURSOR cursor_zadanie5 IS SELECT dzial_id, COUNT(*) AS LICZBA_OSOB FROM pracownicy_07 WHERE dzial_id < par_id_dzial GROUP BY dzial_id ORDER BY dzial_id;
  87.   NO_DATA_FOUND EXCEPTION;
  88. BEGIN
  89.   FOR pracownik IN cursor_zadanie5 LOOP
  90.     BEGIN
  91.       IF pracownik.LICZBA_OSOB < 2 THEN
  92.         RAISE NO_DATA_FOUND;
  93.       END IF;
  94.       DBMS_OUTPUT.PUT_LINE('Dzial: '||pracownik.dzial_id||' | ilosc osob: '||pracownik.LICZBA_OSOB);
  95.       EXCEPTION
  96.         WHEN NO_DATA_FOUND THEN
  97.           DBMS_OUTPUT.PUT_LINE('Dzial: '||pracownik.dzial_id||' | liczba osob mniejsza od 2');
  98.     END;
  99.   END LOOP;
  100. END;
  101.  
  102. BEGIN
  103.   zadanie5(100);
  104. END;
  105.  
  106. --ZADANIE 6--
  107. CREATE OR REPLACE PROCEDURE zadanie6(par_id_dzial VARCHAR2) AS  
  108.   CURSOR cursor_zadanie5 IS SELECT dzial_id, COUNT(*) AS LICZBA_OSOB FROM pracownicy_07 WHERE dzial_id < par_id_dzial GROUP BY dzial_id ORDER BY dzial_id;
  109.   NO_DATA_FOUND EXCEPTION;
  110. BEGIN
  111.   IF par_id_dzial < 10 OR par_id_dzial > 270 THEN
  112.     RAISE INVALID_NUMBER;
  113.   END IF;
  114.   FOR pracownik IN cursor_zadanie5 LOOP
  115.     BEGIN
  116.       IF pracownik.LICZBA_OSOB < 2 THEN
  117.         RAISE NO_DATA_FOUND;
  118.       END IF;
  119.       DBMS_OUTPUT.PUT_LINE('Dzial: '||pracownik.dzial_id||' | ilosc osob: '||pracownik.LICZBA_OSOB);
  120.       EXCEPTION
  121.         WHEN NO_DATA_FOUND THEN
  122.           DBMS_OUTPUT.PUT_LINE('Dzial: '||pracownik.dzial_id||' | liczba osob mniejsza od 2');
  123.     END;
  124.   END LOOP;
  125.   EXCEPTION
  126.     WHEN INVALID_NUMBER THEN
  127.       DBMS_OUTPUT.PUT_LINE('Zly parametr!');
  128. END;
  129.  
  130. BEGIN
  131.   zadanie6(270);
  132. END;
  133.  
  134. --ZADANIE 7--
  135. CREATE OR REPLACE PROCEDURE zadanie7(par_id_dzial VARCHAR2) AS  
  136.   NO_DATA_FOUND EXCEPTION;
  137.   zm_dzial_id NUMBER;
  138.   zm_suma_zarobkow NUMBER;
  139. BEGIN
  140.   IF par_id_dzial < 10 OR par_id_dzial > 270 THEN
  141.     RAISE INVALID_NUMBER;
  142.   END IF;
  143.   SELECT dzial_id, SUM(pobory) AS SUMA_ZAROBKOW INTO zm_dzial_id, zm_suma_zarobkow FROM pracownicy_07 WHERE dzial_id = par_id_dzial GROUP BY dzial_id;
  144.   DBMS_OUTPUT.PUT_LINE('Dzial: '||par_id_dzial||' | suma zarobkow: '||zm_suma_zarobkow);
  145.   EXCEPTION
  146.     WHEN INVALID_NUMBER THEN
  147.       DBMS_OUTPUT.PUT_LINE('Zly parametr!');
  148.     WHEN OTHERS THEN
  149.       DBMS_OUTPUT.PUT_LINE('Dzial: '||par_id_dzial||' | suma zarobkow: 0');
  150. END;
  151.  
  152. BEGIN
  153.   zadanie7(110);
  154. END;
  155.  
  156. --ZADANIE 8--
  157. CREATE OR REPLACE PROCEDURE zadanie8 AS
  158.     CURSOR cursor_zadanie8 IS
  159.         SELECT DYR.szef_id, PRAC.pobory_pod, SUM(DYR.pobory_pod) AS prac_pob
  160.             FROM zaloga PRAC
  161.                 JOIN zaloga DYR ON DYR.szef_id = PRAC.prac_id
  162.                 JOIN etaty ON PRAC.etat = etaty.nazwa
  163.             WHERE etaty.nazwa = 'DYREKTOR'
  164.             GROUP BY DYR.szef_id, PRAC.pobory_pod ORDER BY DYR.szef_id;
  165.     procent_z_poborow NUMBER(6,2);
  166.     ZA_DUZA_PENSJA EXCEPTION;
  167.     PRAGMA exception_init (ZA_DUZA_PENSJA, -20000);
  168. BEGIN
  169.     FOR x IN cursor_zadanie8 LOOP
  170.         procent_z_poborow := x.pobory_pod + (x.prac_pob * 0.01);
  171.         IF procent_z_poborow > 4000 THEN
  172.             RAISE_APPLICATION_ERROR(-20000, 'Pensja dyrektora wieksza niz 4000!');
  173.         END IF;
  174.         DBMS_OUTPUT.PUT_LINE('Szef ID: '||x.szef_id||' | zarobki przed podwyzka: '||x.pobory_pod||' | zarobki po podwyzce: '||procent_z_poborow);
  175.     END LOOP;
  176.     EXCEPTION
  177.         WHEN ZA_DUZA_PENSJA THEN
  178.             DBMS_OUTPUT.PUT_LINE('Pensja dyrektora wieksza niz 4000!');
  179. END;
  180.  
  181. BEGIN
  182.     zadanie8;
  183. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement