Académique Documents
Professionnel Documents
Culture Documents
ON DIRECTORY OUT_DIR TO HR; CONNECT HR/HR SELECT * FROM ALL_DIRECTORIES; create or replace package p_report as PROCEDURE all_emp(dir IN VARCHAR2, filename IN VARCHAR2); PROCEDURE sal_emp(dir IN VARCHAR2, filename IN VARCHAR2); end p_report; / create or replace package body p_report as PROCEDURE all_emp(dir IN VARCHAR2, filename IN VARCHAR2) IS file UTL_FILE.FILE_TYPE; CURSOR c_allemp IS SELECT e.employee_id, e.first_name, e.last_name, e.department_id, d.department_name, e.salary, a.maxsal, b.minsal FROM employees e, departments d, (SELECT department_id, MAX(salary) maxsal FROM employees GROUP BY department_id) a, (SELECT department_id, MIN(salary) minsal FROM employees GROUP BY department_id) b WHERE e.department_id = a.department_id AND e.department_id = d.department_id AND e.department_id = b.department_id; BEGIN file:= UTL_FILE.FOPEN (dir, filename, 'w'); UTL_FILE.PUT_LINE(file, 'REPORT ALL EMPLOYEES: GENERATED ON ' YSDATE); UTL_FILE.NEW_LINE (file); UTL_FILE.PUT_LINE(file,'EmpId' ' ' 'Full Name' ' ' 'DeptID' ' ' 'DeptName' ' ' 'Salary' ' ' 'MAXsalary' ' ' 'MINsalary'); UTL_FILE.NEW_LINE (file); for rec_allemp in c_allemp LOOP UTL_FILE.PUT_LINE (file, rec_allemp.employee_id ' -- ' rec_allemp.first_name ' ' rec_allemp.last_name ' -- ' rec_allemp.department_ id ' -- ' rec_allemp.department_name re ' -- '
c_allemp.salary
' -- ' rec_allemp.maxsal ' -- ' rec_allemp.minsal); UTL_FILE.NEW_LINE(file); END LOOP; UTL_FILE.PUT_LINE(file,'---------- END OF REPORT ----------'); UTL_FILE.FCLOSE (file); EXCEPTION WHEN UTL_FILE.INVALID_FILEHANDLE THEN RAISE_APPLICATION_ERROR(-20001,'Invalid File.'); WHEN UTL_FILE.WRITE_ERROR THEN RAISE_APPLICATION_ERROR (-20002, 'Unable to write to file'); END all_emp; PROCEDURE sal_emp(dir IN VARCHAR2, filename IN VARCHAR2) IS file UTL_FILE.FILE_TYPE; CURSOR c_salemp IS SELECT e.employee_id, e.first_name, e.last_name, e.department_id, d.department_name, e.salary, b.minsal FROM employees e, departments d, (SELECT department_id, MIN(salary) minsal FROM employees GROUP BY department_id) b WHERE e.department_id = d.department_id AND e.department_id = b.department_id AND e.salary = b.minsal; BEGIN file:= UTL_FILE.FOPEN (dir, filename, 'w'); UTL_FILE.PUT_LINE(file, 'REPORT ALL EMPLOYEES: GENERATED ON ' S
YSDATE); UTL_FILE.NEW_LINE (file); UTL_FILE.PUT_LINE(file,'EmpId' ' ' 'Full Name' ' ' 'DeptID' ' ' 'DeptName' ' ' 'MINSalary' ' ' 'Salary'); UTL_FILE.NEW_LINE (file); for rec_salemp in c_salemp LOOP UTL_FILE.PUT_LINE (file, rec_salemp.employee_id ' -- ' rec_salemp.first_name ' ' rec_salemp.last_name ' -- ' rec_salemp.department_id ' -- ' rec_salemp.department_name ' -- ' rec_salemp.minsal ' -- ' rec_salemp.salary); UTL_FILE.NEW_LINE(file); END LOOP; UTL_FILE.PUT_LINE(file,'---------- END OF REPORT ----------'); UTL_FILE.FCLOSE (file); EXCEPTION WHEN UTL_FILE.INVALID_FILEHANDLE THEN RAISE_APPLICATION_ERROR(-20001,'Invalid File.'); WHEN UTL_FILE.WRITE_ERROR THEN RAISE_APPLICATION_ERROR (-20002, 'Unable to write to file'); END sal_emp; END p_report; /