0% found this document useful (0 votes)
457 views

Step by Step Writing A Text File Using UTL

The document describes the steps to write data from an Oracle database table to a text file using the UTL_FILE package in PL/SQL. It involves creating a directory object pointing to the file system location, granting privileges to the user, connecting as that user, and running a procedure that opens a file, loops through the table records, formats each record and writes it line by line to the file. The procedure also closes the file. Upon execution, a new text file is created in the specified location containing the formatted contents of the database table.

Uploaded by

Saquib Mahmood
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
457 views

Step by Step Writing A Text File Using UTL

The document describes the steps to write data from an Oracle database table to a text file using the UTL_FILE package in PL/SQL. It involves creating a directory object pointing to the file system location, granting privileges to the user, connecting as that user, and running a procedure that opens a file, loops through the table records, formats each record and writes it line by line to the file. The procedure also closes the file. Upon execution, a new text file is created in the specified location containing the formatted contents of the database table.

Uploaded by

Saquib Mahmood
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

Step by Step writing a text file using UTL_FILE

package.

UTL_FILE is an oracle pl/sql package that is supplied to allow PL/SQL to read and create text files
in the file system.

UTL_FILE can only read and create text files. Specifically, it cannot be used to read or create
binary files.

UTL_FILE is an appropriate tool for creating reports in the form of flat file from the database .
UTL_FILE is also used for reading files.
The following steps must be followed in order to run UTL_FILE package.
Step 1) Connect as sys database user
Step 2) Create a directory:
SQL> CREATE OR REPLACE DIRECTORY utl_file_dir AS E:\PLSQL;
Directory created.

In the above query utl_file_dir is the logical name for the path E:\PLSQL.
We can mention the logical name utl_file_dir inside the program in uppercase within single quotes
(utl_file_dir is mapped to the directory E:\PLSQL)

We can create any number of logical path names(DBA directories) in oracle 10g.
Step 3) Grant read and write on the directory
SQL> grant read,write on directory utl_file_dir to scott;
Grant succeeded.
Step 4) connect as scott database user
SQL>CONNECT SCOTT/*******
Example
The following is the procedure to write a database table contents to a text file.
This PL/SQL Procedure write the contents of the database table emp in the scott schema to a text
file called emp_table.txt in the windows directory E:\PLSQL
SQL> conn scott/tiger
Connected.
SQL> show user
USER is SCOTT

Step 1)Execute the following procedure.


create or replace procedure write_file is
file1 utl_file.file_type;
cursor empc is
select * from emp;
employ empc%rowtype;
stmt varchar2(300);
head varchar2(300);
line varchar2(300);
begin
file1 := utl_file.fopen(UTL_FILE_DIR,'emp_table.txt,'w);
utl_file.put_line(file1,Report Generated on: || sysdate);
utl_file.new_line(file1);
head:=EMPNO
SAL

ENAME
COMM

JOB

MGR

HIREDATE

DEPTNO;

UTL_FILE.PUTF(file1, head);
utl_file.new_line(file1);
line:=
=================================================================================
=================;
UTL_FILE.PUTF(file1, line);
utl_file.new_line(file1);
for employ in empc loop

stmt := rpad(employ.empno,10, ) ||
rpad(employ.ename,20, ) ||
rpad(employ.job,20, ) ||
rpad(nvl(to_char(employ.mgr), ),30, ) ||
rpad(employ.hiredate,30, ) ||
rpad(employ.sal,30, ) ||
rpad(nvl(to_char(employ.comm), ),25, ) ||
rpad(employ.deptno,8, );
utl_file.PUTF(file1, stmt);
utl_file.new_line(file1);
end loop;
utl_file.fclose(file1);
end;
/
Procedure created.
SQL> execute write_file;
PL/SQL procedure successfully completed.
Step 2) After execution of the above procedure a new file emp_table.txt is created in the location
E:\PLSQL as shown in the below screenshot.

Step 3)Open the text document emp_table.txt to view the output.

Using View output for text file creation


CREATE OR REPLACE PROCEDURE XXXXXX (errbuf OUT VARCHAR2, retcode
OUT VARCHAR2)
--these parameters are mandatory-IS
V_DR_AMT

NUMBER := 0;

V_CR_AMT

NUMBER := 0;

V_SUCCESS_COUNTER NUMBER := 0;
V_LOOSER_COUNTER NUMBER := 0;
V_TOTAL_COUNTER NUMBER := 0;
V_NEGATIVE_COUNTER NUMBER := 0;

BEGIN
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT,'POST PAYROLL HEALTH
CHECK');
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT,'================
=============');
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT, ' ');
BEGIN
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT,'DEBIT CREDIT
DIFFERENCES');
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT,'================
========');
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT, ' ');
FOR X IN (
SELECT PAAF.ASSIGNMENT_NUMBER EMP_NO,

PETF.ELEMENT_NAME,
PPA.DATE_EARNED,
TO_NUMBER(PRRV.RESULT_VALUE) AMT

FROM --PER_ALL_PEOPLE_F PAPF,


PER_ALL_ASSIGNMENTS_F PAAF,
PAY_ELEMENT_TYPES_F
PAY_RUN_RESULTS

PETF,
PRR,

PAY_RUN_RESULT_VALUES PRRV,
PAY_ALL_PAYROLLS_F

PYLPF,

PAY_INPUT_VALUES_F

PIVF,

PAY_PAYROLL_ACTIONS

PPA,

PAY_ASSIGNMENT_ACTIONS PAA,
GLOBAL_VARIABLES

GV

WHERE PAAF.BUSINESS_GROUP_ID = GV.BG_ID


AND PRR.ELEMENT_TYPE_ID = PETF.ELEMENT_TYPE_ID
AND PRRV.RUN_RESULT_ID = PRR.RUN_RESULT_ID
AND PIVF.INPUT_VALUE_ID = PRRV.INPUT_VALUE_ID
AND PAAF.PAYROLL_ID = PYLPF.PAYROLL_ID
AND PYLPF.PAYROLL_ID = PPA.PAYROLL_ID
AND PAA.ASSIGNMENT_ACTION_ID = PRR.ASSIGNMENT_ACTION_ID
AND PPA.PAYROLL_ACTION_ID = PAA.PAYROLL_ACTION_ID
AND PETF.ELEMENT_NAME = 'Net Salary'
AND PAA.ASSIGNMENT_ID = PAAF.ASSIGNMENT_ID
AND PIVF.NAME = 'Pay Value'
AND PPA.ACTION_STATUS = 'C'

AND PPA.ACTION_TYPE = 'R'


AND PAAF.ASSIGNMENT_TYPE = 'E'
AND PYLPF.PAYROLL_NAME = GV.PAYROLL_NAME
AND PPA.BUSINESS_GROUP_ID = PAAF.BUSINESS_GROUP_ID
AND PPA.DATE_EARNED = P_PAY_DATE
AND PAAF.EFFECTIVE_END_DATE = TO_DATE('31/12/4712',
'DD/MM/RRRR')
AND PETF.EFFECTIVE_END_DATE = TO_DATE('31/12/4712',
'DD/MM/RRRR')
AND PYLPF.EFFECTIVE_END_DATE = TO_DATE('31/12/4712',
'DD/MM/RRRR')
AND PIVF.EFFECTIVE_END_DATE = TO_DATE('31/12/4712',
'DD/MM/RRRR')
ORDER BY PAAF.ASSIGNMENT_NUMBER
)
LOOP
V_TOTAL_COUNTER := V_TOTAL_COUNTER + 1;

V_DR_AMT := GET_DR_CR_HEALTH_CHECK(X.DATE_EARNED, 'D',


X.EMP_NO);
V_CR_AMT := GET_DR_CR_HEALTH_CHECK(X.DATE_EARNED, 'C', X.EMP_NO);

IF (NVL(X.AMT, 0) = (NVL(V_DR_AMT, 0) - NVL(V_CR_AMT, 0))) THEN


V_SUCCESS_COUNTER := V_SUCCESS_COUNTER + 1;
ELSE
V_LOOSER_COUNTER := V_LOOSER_COUNTER + 1;
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT,'DEBITS AND CREDITS
MISMATCH FOR THIS ' ||X.EMP_NO || ' EMPLOYEE.');
END IF;

END LOOP;
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT, ' ');
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT,'TOTAL RECORD
PROCESSED : ' || V_TOTAL_COUNTER);
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT,'TOTAL RECORD
SUCCESSFULY TESTED : ' ||V_SUCCESS_COUNTER);
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT,'TOTAL RECORD REJECTED
: ' || V_LOOSER_COUNTER);
END;
END XXXXXX;

You might also like