CREATE OR REPLACE PROCEDURE EMPLOYEE_REPORT(
   dir VARCHAR2, filename VARCHAR2) 
   IS
     file UTL_FILE.FILE_TYPE;
     CURSOR empc IS     SELECT last_name, department_id, salary /*查出所有需要的信息*/
     FROM employees ORDER BY department_id;
   BEGIN
     file:= UTL_FILE.FOPEN ('dir', filename, 'w');
--如果文件没打开则打开它
     IF NOT UTL_FILE.IS_OPEN(file) THEN        
file := UTL_FILE.FOPEN (dir, filename, 'w');
     END IF; 
     FOR emp_rec IN empc LOOP
       UTL_FILE.PUT_LINE (file, 'DEPARTMENT: ' || emp_rec.department_id);
       UTL_FILE.PUT_LINE (file,' EMPLOYEE: ' || 
                            emp_rec.last_name ||
                            ' earns: ' || emp_rec.salary);
     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 EMPLOYEE_REPORT;
/
EXECUTE EMPLOYEE_REPORT('d:\','1.txt');