Advertisement
Guest User

Untitled

a guest
Jun 13th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.71 KB | None | 0 0
  1. 1.  SET SERVEROUTPUT ON;
  2.  
  3. DECLARE
  4. v_dep NUMBER;
  5. v_sr DECIMAL(6,2);
  6. CURSOR cur_dep IS SELECT AVG(salary) AS srednia, department_name FROM employees, departments WHERE employees.department_id = departments.department_id ORDER BY srednia ASC;
  7.  
  8. BEGIN
  9. OPEN cur_dep;
  10. LOOP
  11.     FETCH cur_dep INTO v_sr, v_dep;
  12.     DBMS_OUTPUT.PUT_LINE(v_dep);
  13.     EXIT WHEN cur_dep%ROWCOUNT = 3
  14. END LOOP;
  15. CLOSE cur_dep;
  16. END;
  17.  
  18. 2.  CREATE OR REPLACE PROCEDURE miasto(v_miasto VARCHAR2(20))
  19. IS
  20. CURSOR cur_miasto IS SELECT department_name, city FROM departments, locations WHERE departments.location_id = locations.location_id AND city = v_miasto;
  21. v_dep VARCHAR2(20);
  22. v_miast VARCHAR2(20);
  23. miastox EXCEPTION;
  24.  
  25. BEGIN
  26. LOOP
  27.     OPEN cur_miasto;
  28.     FETCH cur_miasto INTO v_dep, v_miast;
  29.     EXIT WHEN cur_miasto%NOTFOUND;
  30.     EXCEPTION
  31. IF NO_DATA_FOUND THEN
  32.     RAISE miastox;
  33.     END IF;
  34. END LOOP;
  35. EXCEPTION
  36. WHEN miastox THEN
  37. DBMS_OUTPUT.PUT_LINE(„Brak wydziału w podanym mieście”);
  38. END;
  39. /-nowa karta
  40.  
  41. EXEC miasto;
  42.  
  43.  
  44. 4.  CREATE OR REPLACE PROCEDURE podwyzka(id_dep VARCHAR2(5), pens DECIMAL(2,1) DEFAULT 0.1)
  45. IS
  46. BEGIN
  47. UPDATE employees SET salary = salary + (salary*pens) WHERE department_id = id_dep;
  48. EXCEPTION
  49. WHEN NO_DATA_FOUND THEN
  50. RAISE_APPLICATION_ERROR (-20001, ‘Złe ID wydziału’);
  51. END;
  52. /-nowa karta
  53.  
  54. EXEC podwyzka;
  55.  
  56.  
  57. 5.  CREATE OR REPLACE FUNCTION staz(p_id NUMBER) RETURN NUMBER IS
  58.  
  59. CURSOR cur_daty IS SELECT MONTHS_BETWEEN(TO_DATE(hire_date, ‘MM-DD-YYYY’), (TO_DATE(CURRENT_DATE, ‘MM-DD-YYYY’)) FROM employees WHERE employee_id = p_id;
  60. CURSOR cur_daty_wszystkie IS SELECT MONTHS_BETWEEN(TO_DATE(hire_date, ‘MM-DD-YYYY’), (TO_DATE(CURRENT_DATE, ‘MM-DD-YYYY’)) FROM employees;
  61. v_data NUMBER;
  62. v_data_all NUMBER;
  63. suma NUMBER := 0;
  64. ile NUMBER := 0;
  65. srednia NUMBER;
  66.  
  67. BEGIN
  68. OPEN cur_daty;
  69. FETCH cur_daty INTO v_data;
  70. RETURN v_data;
  71. CLOSE cur_daty;
  72. OPEN cur_daty_wszystkie;
  73. LOOP
  74. FETCH cur_daty_wszystkie INTO v_data_all;
  75. suma := suma + v_data_all;
  76. ile := ile + 1;
  77. EXIT WHEN cur_daty_wszystkie%NOTFOUND;
  78. END LOOP;
  79. srednia := suma/ile;
  80. CLOSE cur_daty_wszystkie;
  81. DBMS_OUTPUT.PUT_LINE(‘Średni staż wszystkich pracowników wynosi ‘ || srednia);
  82. END;
  83. /-nowa karta
  84.  
  85. DBMS_OUTPUT.PUT_LINE(staz(id_jakies));
  86.  
  87.  
  88.  
  89. 6.  CREATE OR REPLACE FUNCTION dodatki(p_id NUMBER) RETURN NUMBER IS
  90.  
  91. CURSOR cur_dodatki IS SELECT commission_pct, MONTHS_BETWEEN(TO_DATE(hire_date, ‘MM-DD-YYYY’), (TO_DATE(CURRENT_DATE, ‘MM-DD-YYYY’)) FROM employees WHERE employee_id = p_id;
  92. v_dodatek NUMBER;
  93. v_data NUMBER;
  94. v_suma NUMBER := 0;
  95.  
  96. BEGIN
  97. OPEN cur_dodatki;
  98. FETCH cur_dodatki INTO v_dodatek, v_data;
  99. v_suma := v_data * 0.01;
  100. RETURN v_suma;
  101. CLOSE cur_dodatki;
  102. END;
  103. /-nowa karta
  104.  
  105. DBMS_OUTPUT.PUT_LINE(dodatki(id_jakies));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement