Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  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. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement