UTL Package
UTL Package
Here are simple examples to understand the UTL_FILE enhancement in Oracle 9i Release 2
Examples discussed in this article are
U:\>sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - Production on Wed Feb 19 16:40:39 2003
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
The execution of the above procedure will create a file in C:\TEMP\LOC1 with a name
NEWFILE.TXT
===============================================================
TEST FOR COPYING A FILE ON SAME LOCATION.
PROCEDURE FCOPY
PROCEDURE FRENAME
===============================================================
TEST FOR GETTING ATTRIBUTE OF A FILE
PROCEDURE FGETATTR
LENGTH is the number of chars with spaces found in the file NEWFILE4.TXT
file_open
charsetmismatch
invalid_path
invalid_mode
invalid_filehandle
invalid_operation
read_error
write_error
internal_error
invalid_maxlinesize
invalid_filename
access_denied
invalid_offset
delete_failed
rename_failed
===============================================================
create or replace directory dir_temp as 'c:\temp';
declare
f utl_file.file_type;
begin
f := utl_file.fopen('DIR_TEMP', 'something.txt', 'w');
utl_file.put_line(f, 'line one: some text');
utl_file.put_line(f, 'line two: more text');
utl_file.fclose(f);
end;
===============================================================
SQL> create or replace directory DIR_UTL as 'C:\UTLFOLDER';
Directory created.
OutPut
----------
SALARY REPORT: GENERATED ON 08-MAR-01
DEPARTMENT: 10
EMPLOYEE: Whalen earns: 4400
DEPARTMENT: 20
EMPLOYEE: Hartstein earns: 13000
EMPLOYEE: Fay earns: 6000
DEPARTMENT: 30
EMPLOYEE: Raphaely earns: 11000
EMPLOYEE: Khoo earns: 3100
...
DEPARTMENT: 100
EMPLOYEE: Greenberg earns: 12000
...
DEPARTMENT: 110
EMPLOYEE: Higgins earns: 12000
EMPLOYEE: Gietz earns: 8300
EMPLOYEE: Grant earns: 7000
*** END OF REPORT ***
===============================================================
CREATE OR REPLACE PROCEDURE utl_prc
(p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
IS
v_filehandle UTL_FILE.FILE_TYPE;
CURSOR emp_info IS
SELECT ename, sal, deptno
FROM emp
ORDER BY deptno;
BEGIN
v_filehandle := UTL_FILE.FOPEN (p_filedir, p_filename,'w');
UTL_FILE.PUTF (v_filehandle,'SALARY REPORT: GENERATED ON %s\n',
SYSDATE);
UTL_FILE.NEW_LINE (v_filehandle);
FOR v_emp_rec IN emp_info
LOOP
UTL_FILE.PUTF (v_filehandle, 'EMP Table:
%s\n',v_emp_rec.deptno,v_emp_rec.ename, v_emp_rec.sal);
END LOOP;
UTL_FILE.PUT_LINE (v_filehandle, '*** END OF REPORT ***');
UTL_FILE.FCLOSE (v_filehandle);
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 utl_prc;
===============================================================