title: UTL_FILE saving in local machine
body: <p><em>Hello,
  I wanted to save all the functions,procedures,packages in my local machine. I tried with SPOOL but with spool im not sure to get the filename and save it. So i tried with UTL_FILE.. But the problem is my database is in UNIX and I wanted to save in my windows local machine. Im getting the below mentioned error</em> </p>
  
  <p><strong>Fehlerbericht -
  ORA-29283: Ungültiger Dateivorgang
  ORA-06512: in "SYS.UTL_FILE", Zeile 536
  ORA-29283: Ungültiger Dateivorgang
  ORA-06512: in Zeile 24
  29283. 00000 -  "invalid file operation%s"
  *Cause:    An attempt was made to read from a file or directory that does
             not exist, or file or directory access was denied by the
             operating system.
  *Action:   Verify file and directory access privileges on the file system,
             and if reading, verify that the file exists.</strong></p>
  
  <p>And the below is my code.</p>
  
  <pre><code>CREATE DIRECTORY FUNC_DIR AS 'C:\Workspace\BE\DB\Funktionen\';
  CREATE DIRECTORY PROC_DIR AS 'C:\Workspace\BE\DB\Prozeduren';
  CREATE DIRECTORY PACK_DIR AS 'C:\Workspace\BE\DB\Package\';
  CREATE DIRECTORY PACBO_DIR AS 'C:\Workspace\BE\DB\Package_Body';
  GRANT READ,WRITE ON DIRECTORY FUNC_DIR TO PUBLIC;
  GRANT READ,WRITE ON DIRECTORY PROC_DIR TO PUBLIC;
  GRANT READ,WRITE ON DIRECTORY PACK_DIR TO PUBLIC;
  GRANT READ,WRITE ON DIRECTORY PACBO_DIR TO PUBLIC;
  
  DECLARE
  fileHandler UTL_FILE.FILE_TYPE; 
  filename VARCHAR2(60); 
  filetext VARCHAR2(32766); 
  filetype VARCHAR2(20);
  
  
  BEGIN 
  FOR a IN (SELECT distinct name,type INTO filename,filetype 
  FROM all_source 
  WHERE type IN 
  ('FUNCTION','PROCEDURE','PACKAGE','PACKAGE_BODY') 
  AND OWNER='HR')
  LOOP
  filetype := a.object_type;
  filename := a.object_name;  
  IF (filetype = 'FUNCTION') THEN
  fileHandler := UTL_FILE.FOPEN('FUNC_DIR', filename||'.sql', 'W'); 
  ELSIF filetype = 'PROCEDURE' THEN
  fileHandler := UTL_FILE.FOPEN('PROC_DIR', filename||'.sql', 'W'); 
  ELSIF filetype = 'PACKAGE' THEN
  fileHandler := UTL_FILE.FOPEN('PACK_DIR', filename||'.sql', 'W');  
  ELSIF filetype = 'PACKAGE_BODY' THEN
  fileHandler := UTL_FILE.FOPEN('PACBO_DIR', filename||'.sql', 'W'); 
  
  FOR b IN (SELECT text INTO filetext FROM all_source WHERE TYPE IN('FUNCTION')AND OWNER = 'HR' AND 
  NAME = (filename))
  LOOP
  filetext := b.text;
  UTL_FILE.PUTF(fileHandler, filetext); 
  END LOOP;
  UTL_FILE.FCLOSE(fileHandler); 
  
  ELSE
  DBMS_OUTPUT.PUT_LINE('OBJECT TYPE DOES NOT MATCH');
  END IF;
  END LOOP;
  EXCEPTION
  WHEN utl_file.invalid_path THEN
  raise_application_error(-20000, 'ERROR: Invalid PATH FOR file.');
  END;
  /
  </code></pre>