Vous êtes sur la page 1sur 3

CONNECT SYS/ORACLE AS SYSDBA GRANT EXECUTE ON UTL_FILE TO HR; CREATE OR REPLACE DIRECTORY OUT_DIR AS 'C:test'; GRANT READ, WRITE

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; /

exec p_report.all_emp('OUT_DIR','allemp_report.txt'); exec p_report.sal_emp('OUT_DIR','salemp_report.txt');

Vous aimerez peut-être aussi