Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.35 KB | None | 0 0
  1. -- zmienic check na jakas inna
  2. --zad1
  3.  
  4. DROP TABLE log;
  5. CREATE TABLE log (
  6. date_of_action DATE,
  7. user_id VARCHAR2(20),
  8. package_name VARCHAR2(30)
  9. );
  10.  
  11. CREATE OR REPLACE PACKAGE emp_admin AUTHID DEFINER AS
  12. -- Deklaracja typu publicznego, kursora i wyjątku:
  13. TYPE EmpRecTyp IS RECORD (emp_id NUMBER, sal NUMBER);
  14. CURSOR desc_salary RETURN EmpRecTyp;
  15. invalid_salary EXCEPTION;
  16. -- Deklaracja publicznych podprogramów:
  17. FUNCTION hire_employee (
  18. last_name VARCHAR2,
  19. first_name VARCHAR2,
  20. email VARCHAR2,
  21. phone_number VARCHAR2,
  22. job_id VARCHAR2,
  23. salary NUMBER,
  24. commission_pct NUMBER,
  25. manager_id NUMBER,
  26. department_id NUMBER
  27. ) RETURN NUMBER;
  28. -- Przeciążenie uprzednio zdefiniowanych
  29. -- publicznych podprogramów:
  30. PROCEDURE fire_employee (emp_id NUMBER);
  31. PROCEDURE fire_employee (emp_email VARCHAR2);
  32. PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER);
  33. FUNCTION nth_highest_salary (n NUMBER) RETURN EmpRecTyp;
  34. END emp_admin;
  35.  
  36.  
  37. CREATE OR REPLACE PACKAGE BODY emp_admin AS
  38. number_hired NUMBER; -- zmienna prywatna widoczna tylko w tym pakiecie
  39. -- Zdefiniuj kursor zadeklarowany w specyfikacji pakietu:
  40. CURSOR desc_salary RETURN EmpRecTyp IS
  41. SELECT employee_id, salary
  42. FROM employees
  43. ORDER BY salary DESC;
  44. -- Zdefiniuj podprogramy zadeklarowane w specyfikacji pakietu:
  45. FUNCTION hire_employee (
  46. last_name VARCHAR2,
  47. first_name VARCHAR2,
  48. email VARCHAR2,
  49. phone_number VARCHAR2,
  50. job_id VARCHAR2,
  51. salary NUMBER,
  52. commission_pct NUMBER,
  53. manager_id NUMBER,
  54. department_id NUMBER
  55. ) RETURN NUMBER
  56. IS
  57. new_emp_id NUMBER;
  58. BEGIN
  59. new_emp_id := employees_seq.NEXTVAL;
  60. INSERT INTO employees (
  61. employee_id,
  62. last_name,
  63. first_name,
  64. email,
  65. phone_number,
  66. hire_date,
  67. job_id,
  68. salary,
  69. commission_pct,
  70. manager_id,
  71. department_id
  72. )
  73. VALUES (
  74. new_emp_id,
  75. hire_employee.last_name,
  76. hire_employee.first_name,
  77. hire_employee.email,
  78. hire_employee.phone_number,
  79. SYSDATE,
  80. hire_employee.job_id,
  81. hire_employee.salary,
  82. hire_employee.commission_pct,
  83. hire_employee.manager_id,
  84. hire_employee.department_id
  85. );
  86. number_hired := number_hired + 1;
  87. DBMS_OUTPUT.PUT_LINE('Liczba zatrudnionych pracowników: '
  88. || TO_CHAR(number_hired) );
  89. RETURN new_emp_id;
  90. END hire_employee;
  91. PROCEDURE fire_employee (emp_id NUMBER) IS
  92. BEGIN
  93. DELETE FROM employees WHERE employee_id = emp_id;
  94. END fire_employee;
  95. PROCEDURE fire_employee (emp_email VARCHAR2) IS
  96. BEGIN
  97. DELETE FROM employees WHERE email = emp_email;
  98. END fire_employee;
  99. -- Zdefiniuj prywatną funkcję dostępną tylko w pakiecie:
  100. FUNCTION sal_ok (
  101. jobid VARCHAR2,
  102. sal NUMBER
  103. ) RETURN BOOLEAN
  104. IS
  105. min_sal NUMBER;
  106. max_sal NUMBER;
  107. BEGIN
  108. SELECT MIN(salary), MAX(salary)
  109. INTO min_sal, max_sal
  110. FROM employees
  111. WHERE job_id = jobid;
  112. RETURN (sal >= min_sal) AND (sal <= max_sal);
  113. END sal_ok;
  114. PROCEDURE raise_salary (
  115. emp_id NUMBER,
  116. amount NUMBER
  117. )
  118. IS
  119. sal NUMBER(8,2);
  120. jobid VARCHAR2(10);
  121. BEGIN
  122. SELECT job_id, salary INTO jobid, sal
  123. FROM employees
  124. WHERE employee_id = emp_id;
  125. IF sal_ok(jobid, sal + amount) THEN -- Wywołaj prywatną funkcję
  126. UPDATE employees
  127. SET salary = salary + amount
  128. WHERE employee_id = emp_id;
  129. ELSE
  130. RAISE invalid_salary;
  131. END IF;
  132. EXCEPTION
  133. WHEN invalid_salary THEN
  134. DBMS_OUTPUT.PUT_LINE ('Wynagrodzenie jest poza określonym zakresem.');
  135. END raise_salary;
  136. FUNCTION nth_highest_salary (
  137. n NUMBER
  138. ) RETURN EmpRecTyp
  139. IS
  140. emp_rec EmpRecTyp;
  141. BEGIN
  142. OPEN desc_salary;
  143. FOR i IN 1..n LOOP
  144. FETCH desc_salary INTO emp_rec;
  145. END LOOP;
  146. CLOSE desc_salary;
  147. RETURN emp_rec;
  148. END nth_highest_salary;
  149. BEGIN -- część inicjalizacyjna ciała pakietu
  150. INSERT INTO log (date_of_action, user_id, package_name)
  151. VALUES (SYSDATE, USER, 'EMP_ADMIN');
  152. number_hired := 0;
  153. END emp_admin;
  154.  
  155.  
  156. DECLARE
  157. new_emp_id NUMBER(6);
  158. BEGIN
  159. new_emp_id := emp_admin.hire_employee (
  160. 'Belden',
  161. 'Enrique',
  162. 'EBELDEN',
  163. '555.111.2222',
  164. 'ST_CLERK',
  165. 2500,
  166. .1,
  167. 101,
  168. 110
  169. );
  170. DBMS_OUTPUT.PUT_LINE ('ID pracownika: ' || TO_CHAR(new_emp_id));
  171. emp_admin.raise_salary (new_emp_id, 100);
  172. DBMS_OUTPUT.PUT_LINE (
  173. '10. Najwyższe wynagrodzenie to: '||
  174. TO_CHAR (emp_admin.nth_highest_salary(10).sal) ||
  175. ', należy do pracownika: ' ||
  176. TO_CHAR (emp_admin.nth_highest_salary(10).emp_id)
  177. );
  178. emp_admin.fire_employee(new_emp_id);
  179. -- Możesz również usunąć nowo dodanego pracownika w następujący sposób:
  180. -- emp_admin.fire_employee ('EBELDEN');
  181. END;
  182.  
  183.  
  184. --zad2
  185.  
  186. CREATE TABLE AUTO_KOMIS(
  187. nr_rej VARCHAR2
  188. PRIMARY KEY( one or more columns )
  189. );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement