Saturday, June 28, 2014

Reading from File and Writing to File using UTL_FILE Package - PL/SQL

Background:

With the UTL_FILE package, your PL/SQL programs can read and write operating system text files.

Prerequisite steps:

1. Create UTF_FILE directory.
CREATE OR REPLACE DIRECTORY MY_UTL_DIR AS '/usr/tmp/utl'
2. Now keep a simple text file 'temp.txt' in '/usr/tmp/utl' directory. My temp.txt file has 10 lines.

Program 1: Now lets try a simple program which reads the file temp.txt and print on the console.

DECLARE
l_fileID UTL_FILE.FILE_TYPE;
l_dirpath VARCHAR2 (50) := 'MY_UTL_DIR';
l_filename VARCHAR2 (50) := 'temp.txt';
l_line_counter NUMBER := 1;
l_buffer VARCHAR2(32000);
BEGIN
/*Open file*/
l_fileID := UTL_FILE.FOPEN (l_dirpath, l_filename, 'r', 32000);
LOOP
/*Read and output the line until we reach the last line*/
UTL_FILE.GET_LINE(l_fileID, l_buffer, 32000);
dbms_output.put_line('Line' || l_line_counter: ||' '|| l_buffer);
l_line_counter := l_line_counter + 1;
END LOOP;
EXCEPTION
WHEN UTL_FILE.INVALID_PATH THEN
DBMS_OUTPUT.PUT_LINE('File location is invalid');
WHEN NO_DATA_FOUND THEN /*EOF Reached*/
UTL_FILE.fclose(l_fileID); /* Close the File Type*/
NULL;
END;

Program 2 : Now lets try a simple write program to write 10 lines to the file TestWrite.txt

DECLARE
l_fileID UTL_FILE.FILE_TYPE;
l_dirpath VARCHAR2 (50) := 'MY_UTL_DIR';
l_filename VARCHAR2 (50) := 'TestWrite.txt';
l_buffer VARCHAR2(32000);
l_count NUMBER :=0;
BEGIN
/*Open file*/
l_fileID := UTL_FILE.FOPEN (l_dirpath, l_filename, 'w', 32000);
LOOP
l_count := l_count+1;
/*PUT_LINE procedure writes the text string stored in the buffer to the open file*/
UTL_FILE.PUT_LINE(l_fileID, 'This is Line Number: ' || l_count);
EXIT WHEN l_count = 11;
END LOOP;
UTL_FILE.fclose(l_fileID); /* Close the File Type*/
EXCEPTION
WHEN UTL_FILE.WRITE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('Operating system error occurred during the write operation.');
WHEN others THEN
DBMS_OUTPUT.PUT_LINE('Other Exception.');
END;

No comments:

Post a Comment