Advertisement
Regazzi

Pakiet.sql PACZKA

Apr 9th, 2018
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. SET SERVEROUTPUT ON
  2. CREATE OR REPLACE PACKAGE lab2 IS
  3.     PROCEDURE zad_2a(nazwa VARCHAR2,min_placa VARCHAR2);
  4.     FUNCTION zad_2b (id VARCHAR2) RETURN VARCHAR2;
  5.     PROCEDURE zad_2c(imie VARCHAR2,nazwisko VARCHAR2, data_urodzenia VARCHAR2);
  6.     FUNCTION zad_2d(id VARCHAR2,rok VARCHAR2) RETURN VARCHAR2;
  7.     PROCEDURE zad_2e(rok VARCHAR2);
  8.     PROCEDURE zad_2f(stanowisko VARCHAR2, rok VARCHAR2 DEFAULT '2017');
  9.     PROCEDURE zad_2g;
  10.     PROCEDURE zad_2h(imie_kier VARCHAR2, naz_kier VARCHAR2);
  11.     PROCEDURE zad_2i(imie_k VARCHAR2, nazwisko_k VARCHAR2, stanowisko VARCHAR2);
  12.     PROCEDURE zad_2j(stanowisko VARCHAR2);
  13.     FUNCTION zad_2k(imie_k VARCHAR2, nazwisko_k VARCHAR2, rok_k VARCHAR2) RETURN VARCHAR2;
  14. END;
  15. /
  16. CREATE OR REPLACE PACKAGE BODY lab2 IS
  17. /* Napisz pakiet który b?dzie zawiera? poni?sze funkcje i procedury: */
  18. /*  a)PROCEDURE zad_2a która b?dzie dodawa? stanowisko jako parametry wywo?ania podajemy nazw? i min place.*/
  19.  
  20.     PROCEDURE zad_2a(nazwa VARCHAR2,min_placa VARCHAR2) IS
  21.         id stanowiska.id_st%TYPE;
  22.         wyjatek_1 EXCEPTION;
  23.         CURSOR kursor_1 IS SELECT stanowiska.nazwa_st FROM STANOWISKA;
  24.     BEGIN
  25.         SELECT MAX(stanowiska.id_st) INTO id FROM STANOWISKA;
  26.         FOR i IN kursor_1
  27.           LOOP
  28.             IF i.Nazwa_st = nazwa THEN RAISE wyjatek_1;
  29.             END IF;
  30.           END LOOP;
  31.         INSERT INTO STANOWISKA(id_st,Nazwa_st,Min_placa) VALUES (id+1,nazwa,TO_NUMBER(min_placa,9999));
  32.         DBMS_OUTPUT.PUT_LINE('STANOWISKO:' || CHR(9) || nazwa || CHR(9) || 'ZOSTALO DODANE.');
  33.          EXCEPTION
  34.           WHEN wyjatek_1 THEN DBMS_OUTPUT.PUT_LINE('STANOWISKO JUZ ISTNIEJE!');
  35.           WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WYSTAPIL INNY BLAD');
  36.     END;
  37.  
  38. /*b) FUNKCJE zad_2b która zwróci imi? i nazwisko kierownika podanej osoby.
  39. Jako parametr wywo?ania podajemy ID_Os. Sprawdzi? czy jest kierownik czy nie ma i czy jest dana osoba czy tez nie.
  40. np "Nie ma osoby" lub "Nie ma kierownika" b?d? tez Jan Kowalski.*/
  41.  
  42.     FUNCTION zad_2b (id VARCHAR2) RETURN VARCHAR2 IS
  43.         id_prac NUMBER;
  44.         id_kier NUMBER;
  45.         wynik VARCHAR2(100);
  46.     BEGIN
  47.         SELECT CASE WHEN EXISTS (SELECT * FROM OSOBY WHERE osoby.id_os=id) THEN id ELSE NULL END INTO id_prac FROM DUAL;
  48.         IF id_prac IS NULL THEN RETURN 'NIE MA OSOBY';
  49.         END IF;
  50.         SELECT osoby.id_kierownika INTO id_kier FROM OSOBY WHERE osoby.id_os=id;
  51.         IF id_kier IS NULL THEN RETURN 'NIE MA KIEROWNIKA';
  52.         END IF;
  53.         SELECT UPPER(osoby.imie) || CHR(9) || UPPER(osoby.nazwisko) INTO wynik FROM Osoby WHERE osoby.id_os=id_kier;
  54.         RETURN wynik;
  55.         EXCEPTION
  56.           WHEN OTHERS THEN RETURN 'WYSTAPIL INNY BLAD';
  57.     END;
  58.  
  59. /*c) PROCEDURE zad_2c dodaj?ca osob? do tabeli osoby
  60. jako parametry wywo?ania podajemy Imi?, Nazwisko, Data_ur (numer pracownika wyznaczany wyznaczamy).*/
  61.  
  62.     PROCEDURE zad_2c(imie VARCHAR2,nazwisko VARCHAR2, data_urodzenia VARCHAR2) IS
  63.         id osoby.id_os%TYPE;
  64.         imie_temp VARCHAR2(30);
  65.         pl VARCHAR2(1);
  66.     BEGIN
  67.         SELECT MAX(osoby.id_os) INTO id FROM OSOBY;
  68.         SELECT SUBSTR(imie,-1) INTO imie_temp FROM DUAL;
  69.         IF imie_temp='a' THEN pl:='K';
  70.         ELSE pl:='M';
  71.         END IF;
  72.         INSERT INTO OSOBY(id_os,Imie,Nazwisko,Data_ur,Plec) VALUES(id+1,imie,nazwisko,TO_DATE(data_urodzenia,'RR/MM/DD'),pl);
  73.         DBMS_OUTPUT.PUT_LINE('DODANO DO BAZY OSOBE:' || CHR(9) || UPPER(imie) || CHR(9) || UPPER(nazwisko) || CHR(9) || data_urodzenia);
  74.         EXCEPTION
  75.           WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WYSTAPIL INNY BLAD');
  76.     END;
  77.  
  78. /*d) FUNKCJ? zad_2d która zwróci podatek jaki dana osoba ma zap?aci? za dany rok. */
  79.  
  80.     FUNCTION zad_2d(id VARCHAR2,rok VARCHAR2) RETURN VARCHAR2 IS
  81.         id_prac osoby.id_os%TYPE;
  82.         id_roku NUMBER;
  83.         zarobek NUMBER(10,2);
  84.     BEGIN
  85.         SELECT CASE WHEN EXISTS (SELECT * FROM PLACE WHERE place.id_os=id) THEN id ELSE NULL END INTO id_prac FROM DUAL;
  86.         IF id_prac IS NULL THEN RETURN 'PRACOWNIK NIE OTRZYMUJE PENSJI LUB NIE ISTNIEJE W BAZIE.';
  87.         END IF;
  88.         SELECT CASE WHEN EXISTS (SELECT * FROM PLACE WHERE EXTRACT(YEAR FROM place.data)=rok) THEN rok ELSE NULL END INTO id_roku FROM DUAL;
  89.         IF id_roku IS NULL THEN RETURN 'ROK NIE WYSTEPUJE W BAZIE.';
  90.         END IF;
  91.         SELECT SUM(place.podstawa)+SUM(place.premia) INTO zarobek FROM PLACE WHERE place.id_os = id AND EXTRACT(YEAR FROM place.data)=rok;
  92.         IF zarobek < 4000 THEN RETURN zarobek;
  93.         END IF;
  94.         IF zarobek >= 4000 AND zarobek <= 8700 THEN RETURN ROUND(0.19*zarobek,2);
  95.         END IF;
  96.         IF zarobek > 8700 THEN RETURN ROUND(0.3*zarobek,2);
  97.         END IF;
  98.         EXCEPTION
  99.           WHEN OTHERS THEN RETURN 'WYSTAPIL INNY BLAD';
  100.     END;
  101.  
  102. /*e) PROCEDURE zad_2e która wy?wietli raport o wszystkich pracownikach
  103. którzy pracowali w danym roku, jako parametry wywo?ania podajemy rok.*/
  104.  
  105.     PROCEDURE zad_2e (rok VARCHAR2) IS
  106.         CURSOR kursor_1 IS SELECT osoby.id_os, osoby.imie, osoby.nazwisko, stanowiska.nazwa_st, etaty.data_zat, etaty.data_zw FROM ETATY,OSOBY,STANOWISKA
  107.         WHERE etaty.id_os = osoby.id_os AND stanowiska.id_st = etaty.id_st ORDER BY osoby.id_os;
  108.         rok_min NUMBER;
  109.         rok_max NUMBER;
  110.         wyjatek_1 EXCEPTION;
  111.     BEGIN
  112.         SELECT MIN(EXTRACT(YEAR FROM data_zat)) INTO rok_min FROM ETATY;
  113.         IF rok < rok_min THEN RAISE wyjatek_1;
  114.         END IF;
  115.         DBMS_OUTPUT.PUT_LINE('PRACOWNICY PRACUJACY W ROKU:' || CHR(9) || rok ||' .');
  116.         DBMS_OUTPUT.PUT_LINE(CHR(9));
  117.         FOR i IN kursor_1
  118.           LOOP
  119.             IF i.data_zw IS NOT NULL THEN
  120.               IF EXTRACT(YEAR FROM TO_DATE(rok,'YYYY')) <= EXTRACT(YEAR FROM i.data_zw) AND EXTRACT(YEAR FROM TO_DATE(rok,'YYYY')) >= EXTRACT(YEAR FROM i.data_zat) THEN
  121.                  DBMS_OUTPUT.PUT_LINE(i.imie || CHR(9) || i.nazwisko || CHR(9) || i.nazwa_st || CHR(9) || i.data_zat || CHR(9) || i.data_zw);
  122.               END IF;
  123.             ELSIF EXTRACT(YEAR FROM i.data_zat)<=EXTRACT(YEAR FROM TO_DATE(rok,'YYYY')) THEN
  124.               DBMS_OUTPUT.PUT_LINE(UPPER(i.imie) || CHR(9) || UPPER(i.nazwisko) || CHR(9) || UPPER(i.nazwa_st) || CHR(9) || i.data_zat);
  125.             END IF;
  126.           END LOOP;
  127.           EXCEPTION
  128.             WHEN wyjatek_1 THEN DBMS_OUTPUT.PUT_LINE('ROK NIE WYSTEPUJE W BAZIE');
  129.             WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WYSTAPIL INNY BLAD');
  130.     END;
  131.  
  132. /*f) PROCEDURE zad_2f która wy?wietli? kto pracowa? na podanym stanowisku w danym roku
  133. gdzie rok je?li nie podano ustawi? na warto?? domy?lna 2017.*/
  134.  
  135.     PROCEDURE zad_2f(stanowisko VARCHAR2, rok VARCHAR2 DEFAULT '2017') IS
  136.         CURSOR kursor_1 IS SELECT osoby.id_os, osoby.imie, osoby.nazwisko, stanowiska.nazwa_st, etaty.data_zat, etaty.data_zw FROM ETATY,OSOBY,STANOWISKA
  137.         WHERE etaty.id_os = osoby.id_os AND stanowiska.id_st = etaty.id_st AND stanowiska.nazwa_st = stanowisko ORDER BY osoby.id_os;
  138.         naz_stanowiska VARCHAR2(100);
  139.         rok_min NUMBER;
  140.         wyjatek_1 EXCEPTION;
  141.         wyjatek_2 EXCEPTION;
  142.     BEGIN
  143.         SELECT MIN(EXTRACT(YEAR FROM data_zat)) INTO rok_min FROM ETATY;
  144.         IF TO_NUMBER(rok,9999) < rok_min THEN RAISE wyjatek_1;
  145.         END IF;
  146.         SELECT CASE WHEN EXISTS (SELECT * FROM STANOWISKA WHERE stanowiska.nazwa_st = stanowisko) THEN stanowisko ELSE NULL END INTO naz_stanowiska FROM DUAL;
  147.         IF naz_stanowiska IS NULL THEN RAISE wyjatek_2;
  148.         END IF;
  149.         DBMS_OUTPUT.PUT_LINE('PRACOWNICY PRACUJACY W ROKU:' || CHR(9) || TO_NUMBER(rok,9999) ||' .');
  150.         DBMS_OUTPUT.PUT_LINE(CHR(9));
  151.         FOR i IN kursor_1
  152.           LOOP
  153.             IF i.data_zw IS NOT NULL THEN
  154.               IF EXTRACT(YEAR FROM TO_DATE(rok,'YYYY')) <= EXTRACT(YEAR FROM i.data_zw) AND EXTRACT(YEAR FROM TO_DATE(rok,'YYYY')) >= EXTRACT(YEAR FROM i.data_zat) THEN
  155.                 DBMS_OUTPUT.PUT_LINE(UPPER(i.imie) || CHR(9) || UPPER(i.nazwisko) || CHR(9) || UPPER(i.nazwa_st) || CHR(9) || i.data_zat || CHR(9) || i.data_zw);
  156.               END IF;
  157.             ELSIF EXTRACT(YEAR FROM i.data_zat)<=EXTRACT(YEAR FROM TO_DATE(rok,'YYYY')) THEN DBMS_OUTPUT.PUT_LINE(UPPER(i.imie) || CHR(9) || UPPER(i.nazwisko) || CHR(9) || UPPER(i.nazwa_st) || CHR(9) || i.data_zat);
  158.             END IF;
  159.           END LOOP;
  160.           EXCEPTION
  161.             WHEN wyjatek_1 THEN DBMS_OUTPUT.PUT_LINE('ROK NIE ISTNIEJE');
  162.             WHEN wyjatek_2 THEN DBMS_OUTPUT.PUT_LINE('STANOWISKO NIE ISTNIEJE');
  163.             WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WYSTAPIL INNY BLAD');
  164.     END;
  165.  
  166. /*g) PROCEDURE zad_2g która wy?wietli raport z zarobków danych osób z podzieleniem na lata
  167. i na ko?cu wstawi ko?cowe saldo zarobionych pieni?dzy w firmie.*/
  168.  
  169.     PROCEDURE zad_2g IS
  170.         suma_za_rok NUMBER(10,2);
  171.         suma_pensja NUMBER(10,2);
  172.         suma_wszystko NUMBER(10,2);
  173.         min_data NUMBER;
  174.         max_data NUMBER;
  175.     BEGIN
  176.         SELECT MIN(EXTRACT(YEAR FROM place.data)) INTO min_data FROM PLACE;
  177.         SELECT MAX(EXTRACT(YEAR FROM place.data)) INTO max_data FROM PLACE;
  178.         DBMS_OUTPUT.PUT_LINE('RAPORT Z PLAC DNIA:' || CHR(9) || TO_CHAR(SYSDATE,'DD-MM-RRRR'));
  179.         FOR i IN (SELECT * FROM OSOBY)
  180.           LOOP
  181.             suma_wszystko:=0;
  182.             DBMS_OUTPUT.PUT_LINE(CHR(9));
  183.             DBMS_OUTPUT.PUT_LINE(CHR(9));
  184.             DBMS_OUTPUT.PUT_LINE('IMIE' || CHR(9) || 'NAZWISKO' || CHR(9) || 'DATA URODZENIA');
  185.             DBMS_OUTPUT.PUT_LINE(UPPER(i.imie) || CHR(9) || UPPER(i.nazwisko) || CHR(9) || TO_CHAR(i.data_ur,'DD-MM-RRRR'));
  186.             DBMS_OUTPUT.PUT_LINE(CHR(9));
  187.             FOR rok IN min_data..max_data
  188.               LOOP
  189.                 suma_za_rok:=0;
  190.                 DBMS_OUTPUT.PUT_LINE('PLACE ZA ROK:' || CHR(9) || rok);
  191.                 DBMS_OUTPUT.PUT_LINE('DATA' || CHR(9) || 'PODSTAWA' || CHR(9) || 'PREMIA' || CHR(9) || 'RAZEM');
  192.                 FOR j IN (SELECT * FROM PLACE WHERE place.id_os = i.id_os AND EXTRACT(YEAR FROM place.data) = rok)
  193.                   LOOP
  194.                     suma_pensja := j.podstawa + NVL(j.premia,0);
  195.                     suma_za_rok := suma_za_rok + suma_pensja;
  196.                     suma_wszystko := suma_wszystko + suma_pensja;
  197.                     DBMS_OUTPUT.PUT_LINE(j.data || CHR(9) || j.podstawa || CHR(9) || (NVL(j.premia,0)) || CHR(9) || suma_pensja);
  198.                   END LOOP;
  199.                 IF suma_za_rok>0 THEN
  200.                   DBMS_OUTPUT.PUT_LINE(CHR(9));
  201.                   DBMS_OUTPUT.PUT_LINE('SUMA ZA ROK:' || CHR(9) || rok || ':' || CHR(9) || suma_za_rok);
  202.                 END IF;
  203.               END LOOP;
  204.               DBMS_OUTPUT.PUT_LINE(CHR(9));
  205.               DBMS_OUTPUT.PUT_LINE('SUMA ZA WSZYSTKIE LATA:' || CHR(9) || suma_wszystko);
  206.             END LOOP;
  207.             EXCEPTION
  208.               WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WYSTAPIL INNY BLAD');
  209.     END;
  210.  
  211. /*h) PROCEDUR? zad_2h która wy?wietli sk?ady zespo?ów dla danego kierownika.
  212. Kierownika przekazujemy jako parametr wywo?ania podajemy imi? i nazwisko.*/
  213.  
  214.     PROCEDURE zad_2h (imie_kier VARCHAR2, naz_kier VARCHAR2) IS
  215.         naz_kier_temp VARCHAR2(100);
  216.         imie_kier_temp VARCHAR2(100);
  217.         wyjatek_1 EXCEPTION;
  218.         CURSOR kursor_1 IS SELECT * FROM OSOBY WHERE osoby.id_kierownika = (SELECT osoby.id_os FROM OSOBY
  219.             WHERE osoby.imie = imie_kier AND osoby.nazwisko = naz_kier);
  220.     BEGIN
  221.         SELECT CASE WHEN EXISTS (SELECT * FROM OSOBY WHERE osoby.nazwisko = naz_kier AND osoby.imie = imie_kier) THEN imie_kier ELSE NULL END INTO imie_kier_temp FROM DUAL;
  222.         IF imie_kier_temp IS NULL THEN RAISE wyjatek_1;
  223.         END IF;
  224.         DBMS_OUTPUT.PUT_LINE('ZESPOL KIEROWNIKA:' || CHR(9) || imie_kier || CHR(9) || naz_kier);
  225.         DBMS_OUTPUT.PUT_LINE(CHR(9));
  226.         FOR i IN kursor_1
  227.             LOOP
  228.                 DBMS_OUTPUT.PUT_LINE('PRACOWNIK:' || CHR(9) || i.imie || CHR(9) || i.nazwisko);
  229.             END LOOP;
  230.         EXCEPTION
  231.             WHEN wyjatek_1 THEN DBMS_OUTPUT.PUT_LINE('OSOBA NIE ISTNIEJE');
  232.             WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WYSTAPIL INNY BLAD');
  233.     END;
  234.  
  235. /*i) PROCEDUR? zad_2i która b?dzie dodawa?a etat dla podanej osoby.
  236. W procedurze nale?y sprawdzi? czy dany pracownik ma uko?czone 18 lat i czy nie przekracza pe?nego etatu w naszej firmie.*/
  237.  
  238.     PROCEDURE zad_2i(imie_k VARCHAR2, nazwisko_k VARCHAR2, stanowisko VARCHAR2) IS
  239.         id_osoby NUMBER;
  240.         id_stanowiska NUMBER;
  241.         id_etatu NUMBER;
  242.         data_urodzenia DATE;
  243.         imie_k_temp VARCHAR2(100);
  244.         naz_stanowiska VARCHAR2(100);
  245.         etat_temp NUMBER;
  246.         wyjatek_1 EXCEPTION;
  247.         wyjatek_2 EXCEPTION;
  248.         wyjatek_3 EXCEPTION;
  249.         wyjatek_4 EXCEPTION;
  250.     BEGIN
  251.         SELECT CASE WHEN EXISTS (SELECT * FROM OSOBY WHERE osoby.imie = imie_k AND osoby.nazwisko = nazwisko_k) THEN imie_k ELSE NULL END INTO imie_k_temp FROM DUAL;
  252.         IF imie_k_temp IS NULL THEN RAISE wyjatek_3;
  253.         END IF;
  254.         SELECT CASE WHEN EXISTS (SELECT * FROM STANOWISKA WHERE stanowiska.nazwa_st = stanowisko) THEN stanowisko ELSE NULL END INTO naz_stanowiska FROM DUAL;
  255.         IF naz_stanowiska IS NULL THEN RAISE wyjatek_4;
  256.         END IF;
  257.         SELECT osoby.id_os,osoby.data_ur INTO id_osoby,data_urodzenia FROM OSOBY WHERE osoby.imie = imie_k AND osoby.nazwisko = nazwisko_k;
  258.         SELECT MAX(etaty.id_e) INTO id_etatu FROM ETATY;
  259.         SELECT stanowiska.id_st INTO id_stanowiska FROM STANOWISKA WHERE stanowiska.nazwa_st = stanowisko;
  260.         IF(EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM data_urodzenia))<18 THEN RAISE wyjatek_1;
  261.         END IF;
  262.         FOR i IN (SELECT * FROM ETATY)
  263.           LOOP
  264.             IF i.id_os = id_osoby AND i.id_st = id_stanowiska THEN RAISE wyjatek_2;
  265.             END IF;
  266.           END LOOP;
  267.         INSERT INTO ETATY(id_e,id_os,id_st,data_zat,data_zw) VALUES (id_etatu+1,id_osoby,id_stanowiska,TO_DATE(SYSDATE,'RRRR-MM-DD'),NULL);
  268.         DBMS_OUTPUT.PUT_LINE('DODANO OSOBE:' || CHR(9) || UPPER(imie_k) || CHR(9) || UPPER(nazwisko_k) || CHR(9) || 'NA STANOWISKO:' || CHR(9) || UPPER(stanowisko) ||'.');
  269.         EXCEPTION
  270.           WHEN wyjatek_1 THEN DBMS_OUTPUT.PUT_LINE('OSOBA MA MNIEJ NIZ 18 LAT');
  271.           WHEN wyjatek_2 THEN DBMS_OUTPUT.PUT_LINE('OSOBA PRZEKRACZA PELNY ETAT!');
  272.           WHEN wyjatek_3 THEN DBMS_OUTPUT.PUT_LINE('OSOBA NIE WYSTEPUJE W BAZIE!');
  273.           WHEN wyjatek_4 THEN DBMS_OUTPUT.PUT_LINE('STANOWISKO NIE WYSTEPUJE W BAZIE!');
  274.           WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WYSTAPIL INNY BLAD!');
  275. END;
  276.  
  277. /*j) PROCEDUR? zad_2j która wy?wietli pe?ne informacje o pracownikach na podanym stanowisku
  278. (kto od kiedy pracuje ile zarabia itd. Mo?na wykorzysta? funkcje z nast?pnego zadania).*/
  279.  
  280.     PROCEDURE zad_2j(stanowisko VARCHAR2) IS
  281.         CURSOR kursor_1 IS SELECT osoby.id_os,osoby.imie, osoby.nazwisko, etaty.data_zat FROM OSOBY,ETATY,STANOWISKA
  282.         WHERE osoby.id_os = etaty.id_os AND stanowiska.id_st = etaty.id_st AND stanowiska.nazwa_st = stanowisko ORDER BY osoby.id_os;
  283.         zarobek NUMBER;
  284.         naz_stanowiska VARCHAR2(100);
  285.         wyjatek_1 EXCEPTION;
  286.     BEGIN
  287.         SELECT CASE WHEN EXISTS (SELECT * FROM STANOWISKA WHERE stanowiska.nazwa_st = stanowisko) THEN stanowisko ELSE NULL END INTO naz_stanowiska FROM DUAL;
  288.         IF naz_stanowiska IS NULL THEN RAISE wyjatek_1;
  289.         END IF;
  290.         DBMS_OUTPUT.PUT_LINE('DANE DLA STANOWISKA:' || CHR(9) || stanowisko);
  291.         DBMS_OUTPUT.PUT_LINE('IMIE' || CHR(9) || 'NAZWISKO' || CHR(9) || CHR(9) || CHR(9) || CHR(9) ||'DATA ZATRUDNIENIA' || CHR(9) || 'ZAROBEK');
  292.         FOR i IN kursor_1
  293.           LOOP
  294.             SELECT SUM(place.podstawa)+SUM(NVL(place.premia,0)) INTO zarobek FROM PLACE WHERE place.id_os = i.id_os;
  295.             DBMS_OUTPUT.PUT_LINE(i.imie || CHR(9) || i.nazwisko || CHR(9) || CHR(9) || CHR(9) || CHR(9) || CHR(9) || CHR(9) || i.data_zat || CHR(9) || CHR(9) || CHR(9) || CHR(9) || CHR(9) || zarobek);
  296.           END LOOP;
  297.         EXCEPTION
  298.             WHEN wyjatek_1 THEN DBMS_OUTPUT.PUT_LINE('STANOWISKO NIE ISTNIEJE');
  299.             WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('WYSTAPIL INNY BLAD');
  300.     END;
  301.  
  302. /*k) Funkcja która zwróci ile dana osoba zarobi?a w danym roku.*/
  303.     FUNCTION zad_2k(imie_k VARCHAR2, nazwisko_k VARCHAR2, rok_k VARCHAR2) RETURN VARCHAR2 IS
  304.         zarobek NUMBER(10,2);
  305.         imie_k_temp VARCHAR2(100);
  306.         rok_k_temp NUMBER;
  307.         wyjatek_1 EXCEPTION;
  308.         wyjatek_2 EXCEPTION;
  309.     BEGIN
  310.         SELECT CASE WHEN EXISTS (SELECT * FROM OSOBY WHERE osoby.imie = imie_k AND osoby.nazwisko = nazwisko_k) THEN imie_k ELSE NULL END INTO imie_k_temp FROM DUAL;
  311.         SELECT CASE WHEN EXISTS (SELECT * FROM PLACE WHERE EXTRACT(YEAR FROM place.data) = rok_k) THEN rok_k ELSE NULL END INTO rok_k_temp FROM DUAL;
  312.         IF imie_k_temp IS NULL THEN RAISE wyjatek_1;
  313.         END IF;
  314.         IF rok_k_temp IS NULL THEN RAISE wyjatek_2;
  315.         END IF;
  316.         SELECT SUM(place.podstawa)+SUM(NVL(place.premia,0)) INTO zarobek FROM PLACE,OSOBY
  317.         WHERE osoby.imie = imie_k AND osoby.nazwisko = nazwisko_k AND osoby.id_os = place.id_os
  318.         AND EXTRACT(YEAR FROM place.data) = rok_k;
  319.         RETURN zarobek;
  320.         EXCEPTION
  321.           WHEN wyjatek_1 THEN RETURN 'OSOBA NIE ISTNIEJE';
  322.           WHEN wyjatek_2 THEN RETURN 'ROK NIE ISTNIEJE';
  323.           WHEN OTHERS THEN RETURN 'WYSTAPIL INNY BLAD';
  324.     END;
  325. END;
  326. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement