SHARE
TWEET

Untitled

a guest Mar 26th, 2019 59 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. f) PROCEDURE która wyświetlić kto pracował na podanym stanowisku w danym roku gdzie rok jeśli nie podano ustawić na wartość domyślna 2012.*/
  2.  
  3. CREATE OR REPLACE PROCEDURE stanowiskowroku(p_rok VARCHAR2, p_stanowisko VARCHAR2) IS
  4.   rok NUMBER(4);
  5.   CURSOR  pracownicy IS
  6.     SELECT  DISTINCT *
  7.     FROM    etaty
  8.     WHERE   (EXTRACT(YEAR FROM data_zat) <= rok AND EXTRACT(YEAR FROM data_zw) >= rok) OR (EXTRACT(YEAR FROM data_zat) <= rok AND data_zw IS NULL);
  9.   pracownik VARCHAR2(100);
  10.   ilosc NUMBER(2);
  11.   stanowisko VARCHAR2(20);
  12. BEGIN
  13.   IF p_rok IS NULL THEN rok := 2012; ELSE rok := p_rok; END IF;
  14.  
  15.   SELECT  count(*)
  16.   INTO    ilosc
  17.   FROM    stanowiska
  18.   WHERE   nazwa_st = p_stanowisko;
  19.  
  20.   IF(ilosc > 0) THEN
  21.     DBMS_OUTPUT.PUT_LINE('W roku ' || rok || ' na stanowisku ' || p_stanowisko || ' pracowali:');
  22.     FOR p IN pracownicy LOOP
  23.       SELECT nazwa_st INTO stanowisko FROM stanowiska WHERE id_st = p.id_st;
  24.      
  25.       IF(stanowisko = p_stanowisko) THEN
  26.         SELECT  imie || ' ' || nazwisko
  27.         INTO    pracownik
  28.         FROM    osoby
  29.         WHERE   id_os = p.id_os;
  30.    
  31.         DBMS_OUTPUT.PUT_LINE(pracownik);
  32.       END IF;
  33.     END LOOP;
  34.   ELSE DBMS_OUTPUT.PUT_LINE('Takie stanowisko nie istnieje');
  35.   END IF;
  36. END;
  37. /
  38.  
  39.  
  40. /*g) PROCEDURE która wyświetli raport z zarobków danych osób z podzieleniem na lata i na końcu wstawi końcowe saldo zarobionych pieniędzy w firmie */
  41.  
  42. CREATE OR REPLACE PROCEDURE raport IS
  43.   CURSOR pracownicy IS SELECT * FROM osoby;
  44.   p_place place%ROWTYPE;
  45.   ilosc NUMBER(2);
  46.   suma  NUMBER(10,2);
  47.   sumazarok NUMBER(10,2);
  48.   sumazawszystko NUMBER(10,2);
  49. BEGIN
  50.   DBMS_OUTPUT.PUT_LINE('Raport z plac z dnia ' || TO_CHAR(SYSDATE, 'DD.MM.YYYY'));
  51.  
  52.   FOR p IN pracownicy LOOP
  53.     sumazawszystko := 0;
  54.     DBMS_OUTPUT.PUT_LINE('Imie' || CHR(9) || 'Nazwisko' || CHR(9) || 'Data urodzenia');
  55.     DBMS_OUTPUT.PUT_LINE(p.imie || CHR(9) || p.nazwisko || CHR(9) || TO_CHAR(p.data_ur, 'DD.MM.YYYY'));
  56.    
  57.     FOR rok in 2000..EXTRACT(YEAR FROM SYSDATE) LOOP
  58.       sumazarok := 0;
  59.       SELECT count(*) INTO ilosc FROM place WHERE id_os = p.id_os AND EXTRACT(YEAR FROM data) = rok;
  60.       IF(ilosc > 0) THEN
  61.         DBMS_OUTPUT.PUT_LINE('Place za rok ' || rok);
  62.         DBMS_OUTPUT.PUT_LINE('Data' || CHR(9) || 'Podstawa' || CHR(9) || 'Premia' || CHR(9) || 'Razem');
  63.         FOR a IN (SELECT * FROM place WHERE id_os = p.id_os AND EXTRACT(YEAR FROM data) = rok) LOOP
  64.           suma := a.podstawa + NVL(a.premia, 0);
  65.           DBMS_OUTPUT.PUT_LINE(a.data || CHR(9) || a.podstawa || CHR(9) || NVL(a.premia, 0) || CHR(9) || suma);
  66.           sumazarok := sumazarok + suma;
  67.           sumazawszystko := sumazawszystko + suma;
  68.         END LOOP;
  69.       END IF;
  70.       IF(sumazarok > 0) THEN DBMS_OUTPUT.PUT_LINE('Suma za rok ' || rok || ': ' || sumazarok); END IF;
  71.     END LOOP;
  72.     DBMS_OUTPUT.PUT_LINE('Suma za wszystkie lata: ' || sumazawszystko);
  73.   END LOOP;
  74. END;
  75. /
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top