Introduction

The customer asks us to generate a database file format report in oracle directory itself; from there customer will download the report.

 

Step 1: Call the PL/SQL procedure to generate DBF report in oracle directory

Step 2: Package SSSL_DBASE_PKG_CLOB

<< Package Specification <>

<< Begins >>

CREATE OR REPLACE PACKAGE SSSL_DBASE_PKG_CLOB

AS

PROCEDURE LOAD_TABLE(

P_DIR    IN VARCHAR2,

P_FILE   IN VARCHAR2,

P_TNAME  IN VARCHAR2,

P_CNAMES IN VARCHAR2 DEFAULT NULL,

P_SHOW   IN BOOLEAN DEFAULT FALSE);

PROCEDURE DUMP_TABLE(

P_DIR          IN VARCHAR2,

P_FILE         IN VARCHAR2,

P_TNAME        IN VARCHAR2,

P_CNAMES       IN VARCHAR2 DEFAULT NULL,

P_WHERE_CLAUSE IN VARCHAR2 DEFAULT ‘ 1=1 ‘);

END;

<< Ends>>

<< Package Body <>

 

<< Begins >>

CREATE OR REPLACE PACKAGE BODY SSSL_DBASE_PKG_CLOB

AS

BIG_ENDIAN CONSTANT BOOLEAN DEFAULT TRUE;

TYPE DBF_HEADER

IS

RECORD

(

VERSION    VARCHAR2(25), — dBASE version number

YEAR       INT,          — 1 byte int year, add to 1900

MONTH      INT,          — 1-byte month

DAY        INT,          — 1-byte day

NO_RECORDS VARCHAR2(50), — number of records in file,

HDR_LEN    VARCHAR2(40), — length of header, 2-byte int

REC_LEN    VARCHAR2(40), — number of bytes in record,

NO_FIELDS  INT           — number of fields

);

TYPE FIELD_DESCRIPTOR

IS

RECORD

(

NAME   VARCHAR2(50),

FNAME  VARCHAR2(50),

TYPE     CHAR(1),

LENGTH   INT, — 1 byte length

DECIMALS INT  — 1 byte scale

);

TYPE FIELD_DESCRIPTOR_ARRAY

IS

TABLE OF FIELD_DESCRIPTOR INDEX BY BINARY_INTEGER;

TYPE ROWARRAY

IS

TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER;

G_CURSOR BINARY_INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR;

FUNCTION ITE(

TF  IN BOOLEAN,

YES IN VARCHAR2,

NO  IN VARCHAR2 )

RETURN VARCHAR2

IS

BEGIN

IF ( TF ) THEN

RETURN YES;

ELSE

RETURN NO;

END IF;

END ITE;

FUNCTION TO_INT(

P_DATA IN VARCHAR2 )

RETURN NUMBER

IS

L_NUMBER NUMBER DEFAULT 0;

L_BYTES  NUMBER DEFAULT LENGTH(P_DATA);

BEGIN

IF (BIG_ENDIAN) THEN

FOR I IN 1 .. L_BYTES

LOOP

L_NUMBER := L_NUMBER + ASCII(SUBSTR(P_DATA,I,1)) * POWER(2,8*(I-1));

END LOOP;

ELSE

FOR I IN 1 .. L_BYTES

LOOP

L_NUMBER := L_NUMBER + ASCII(SUBSTR(P_DATA,L_BYTES-I+1,1)) * POWER(2,8*(I

-1));

END LOOP;

END IF;

RETURN L_NUMBER;

END;

PROCEDURE GET_HEADER(

P_BFILE        IN BFILE,

P_BFILE_OFFSET IN OUT NUMBER,

P_HDR          IN OUT DBF_HEADER,

P_FLDS         IN OUT FIELD_DESCRIPTOR_ARRAY )

IS

L_DATA            VARCHAR2(100);

L_HDR_SIZE        NUMBER DEFAULT 32;

L_FIELD_DESC_SIZE NUMBER DEFAULT 32;

L_FLDS FIELD_DESCRIPTOR_ARRAY;

BEGIN

P_FLDS := L_FLDS;

L_DATA := UTL_RAW.CAST_TO_VARCHAR2( DBMS_LOB.SUBSTR( P_BFILE, L_HDR_SIZE,

P_BFILE_OFFSET ) );

P_BFILE_OFFSET := P_BFILE_OFFSET + L_HDR_SIZE;

P_HDR.VERSION  := ASCII( SUBSTR( L_DATA, 1, 1 ) );

DBMS_OUTPUT.PUT_LINE( P_HDR.VERSION );

P_HDR.YEAR       := 1900 + ASCII( SUBSTR( L_DATA, 2, 1 ) );

P_HDR.MONTH      := ASCII( SUBSTR( L_DATA, 3, 1 ) );

P_HDR.DAY        := ASCII( SUBSTR( L_DATA, 4, 1 ) );

P_HDR.NO_RECORDS := TO_INT( SUBSTR( L_DATA, 6, 4 ) );

P_HDR.HDR_LEN    := TO_INT( SUBSTR( L_DATA, 9, 3 ) );

P_HDR.REC_LEN    := TO_INT( SUBSTR( L_DATA, 11, 3 ) );

P_HDR.NO_FIELDS  := TRUNC( (P_HDR.HDR_LEN – L_HDR_SIZE)/ L_FIELD_DESC_SIZE );

FOR I                                    IN 1 .. P_HDR.NO_FIELDS

LOOP

L_DATA := UTL_RAW.CAST_TO_VARCHAR2( DBMS_LOB.SUBSTR( P_BFILE,

L_FIELD_DESC_SIZE, P_BFILE_OFFSET ));

P_BFILE_OFFSET     := P_BFILE_OFFSET + L_FIELD_DESC_SIZE;

P_FLDS(I).NAME     := RTRIM(SUBSTR(L_DATA,1,11),CHR(0));

P_FLDS(I).TYPE     := SUBSTR( L_DATA, 12, 1 );

P_FLDS(I).LENGTH   := ASCII( SUBSTR( L_DATA, 17, 1 ) );

P_FLDS(I).DECIMALS := ASCII(SUBSTR(L_DATA,18,1) );

END LOOP;

P_BFILE_OFFSET := P_BFILE_OFFSET + MOD( P_HDR.HDR_LEN – L_HDR_SIZE,

L_FIELD_DESC_SIZE );

END;

FUNCTION BUILD_INSERT(

P_TNAME  IN VARCHAR2,

P_CNAMES IN VARCHAR2,

P_FLDS   IN FIELD_DESCRIPTOR_ARRAY )

RETURN VARCHAR2

IS

L_INSERT_STATEMENT LONG;

BEGIN

L_INSERT_STATEMENT   := ‘insert into ‘ || P_TNAME || ‘(‘;

IF ( P_CNAMES        IS NOT NULL ) THEN

L_INSERT_STATEMENT := L_INSERT_STATEMENT || P_CNAMES || ‘) values (‘;

ELSE

FOR I IN 1 .. P_FLDS.COUNT

LOOP

IF ( I               <> 1 ) THEN

L_INSERT_STATEMENT := L_INSERT_STATEMENT||’,’;

END IF;

L_INSERT_STATEMENT := L_INSERT_STATEMENT || ‘”‘|| P_FLDS(I).NAME || ‘”‘;

END LOOP;

L_INSERT_STATEMENT := L_INSERT_STATEMENT || ‘) values (‘;

END IF;

FOR I IN 1 .. P_FLDS.COUNT

LOOP

IF ( I               <> 1 ) THEN

L_INSERT_STATEMENT := L_INSERT_STATEMENT || ‘,’;

END IF;

IF ( P_FLDS(I).TYPE   = ‘D’ ) THEN

L_INSERT_STATEMENT := L_INSERT_STATEMENT || ‘to_date(:bv’ || I ||

‘,”yyyymmdd” )’;

ELSE

L_INSERT_STATEMENT := L_INSERT_STATEMENT || ‘:bv’ || I;

END IF;

END LOOP;

L_INSERT_STATEMENT := L_INSERT_STATEMENT || ‘)’;

RETURN L_INSERT_STATEMENT;

END;

FUNCTION GET_ROW(

P_BFILE        IN BFILE,

P_BFILE_OFFSET IN OUT NUMBER,

P_HDR          IN DBF_HEADER,

P_FLDS         IN FIELD_DESCRIPTOR_ARRAY )

RETURN ROWARRAY

IS

L_DATA VARCHAR2(4000);

L_ROW ROWARRAY;

L_N NUMBER DEFAULT 2;

BEGIN

L_DATA := UTL_RAW.CAST_TO_VARCHAR2( DBMS_LOB.SUBSTR( P_BFILE, P_HDR.REC_LEN,

P_BFILE_OFFSET ) );

P_BFILE_OFFSET := P_BFILE_OFFSET + P_HDR.REC_LEN;

L_ROW(0)       := SUBSTR( L_DATA, 1, 1 );

FOR I IN 1 .. P_HDR.NO_FIELDS

LOOP

L_ROW(I)           := RTRIM(LTRIM(SUBSTR( L_DATA, L_N, P_FLDS(I).LENGTH ) ));

IF ( P_FLDS(I).TYPE = ‘F’ AND L_ROW(I) = ‘.’ ) THEN

L_ROW(I)         := NULL;

END IF;

L_N := L_N + P_FLDS(I).LENGTH;

END LOOP;

RETURN L_ROW;

END GET_ROW;

PROCEDURE SHOW(

P_HDR    IN DBF_HEADER,

P_FLDS   IN FIELD_DESCRIPTOR_ARRAY,

P_TNAME  IN VARCHAR2,

P_CNAMES IN VARCHAR2,

P_BFILE  IN BFILE )

IS

L_SEP VARCHAR2(1) DEFAULT ‘,’;

PROCEDURE P(

P_STR IN VARCHAR2)

IS

L_STR LONG DEFAULT P_STR;

BEGIN

WHILE( L_STR IS NOT NULL )

LOOP

L_STR := SUBSTR( L_STR, 251 );

END LOOP;

END;

BEGIN

P( ‘Sizeof DBASE File: ‘ || DBMS_LOB.GETLENGTH(P_BFILE) );

P( ‘DBASE Header Information: ‘ );

P( CHR(9)||’Version = ‘ || P_HDR.VERSION );

P( CHR(9)||’Year    = ‘ || P_HDR.YEAR );

P( CHR(9)||’Month   = ‘ || P_HDR.MONTH );

P( CHR(9)||’Day     = ‘ || P_HDR.DAY );

P( CHR(9)||’#Recs   = ‘ || P_HDR.NO_RECORDS);

P( CHR(9)||’Hdr Len = ‘ || P_HDR.HDR_LEN );

P( CHR(9)||’Rec Len = ‘ || P_HDR.REC_LEN );

P( CHR(9)||’#Fields = ‘ || P_HDR.NO_FIELDS );

P( CHR(10)||’Data Fields:’ );

FOR I IN 1 .. P_HDR.NO_FIELDS

LOOP

P( ‘Field(‘ || I || ‘) ‘ || ‘Name = “‘ || P_FLDS(I).NAME || ‘”, ‘ ||

‘Type = ‘ || P_FLDS(I).TYPE || ‘, ‘ || ‘Len  = ‘ || P_FLDS(I).LENGTH ||

‘, ‘ || ‘Scale= ‘ || P_FLDS(I).DECIMALS );

END LOOP;

P( CHR(10) || ‘Insert We would use:’ );

P( BUILD_INSERT( P_TNAME, P_CNAMES, P_FLDS ) );

P( CHR(10) || ‘Table that could be created to hold data:’);

P( ‘create table ‘ || P_TNAME );

P( ‘(‘ );

FOR I IN 1 .. P_HDR.NO_FIELDS

LOOP

IF ( I   = P_HDR.NO_FIELDS ) THEN

L_SEP := ‘)’;

END IF;

DBMS_OUTPUT.PUT ( CHR(9) || ‘”‘ || P_FLDS(I).NAME || ‘”   ‘);

IF ( P_FLDS(I).TYPE = ‘D’ ) THEN

P( ‘date’ || L_SEP );

ELSIF ( P_FLDS(I).TYPE = ‘F’ ) THEN

P( ‘float’ || L_SEP );

ELSIF ( P_FLDS(I).TYPE    = ‘N’ ) THEN

IF ( P_FLDS(I).DECIMALS > 0 ) THEN

P( ‘number(‘||P_FLDS(I).LENGTH||’,’|| P_FLDS(I).DECIMALS || ‘)’ ||

L_SEP );

ELSE

P( ‘number(‘||P_FLDS(I).LENGTH||’)’||L_SEP );

END IF;

ELSE

P( ‘varchar2(‘ || P_FLDS(I).LENGTH || ‘)’||L_SEP);

END IF;

END LOOP;

P( ‘/’ );

END;

PROCEDURE LOAD_TABLE(

P_DIR    IN VARCHAR2,

P_FILE   IN VARCHAR2,

P_TNAME  IN VARCHAR2,

P_CNAMES IN VARCHAR2 DEFAULT NULL,

P_SHOW   IN BOOLEAN DEFAULT FALSE )

IS

L_BFILE BFILE;

L_OFFSET NUMBER DEFAULT 1;

L_HDR DBF_HEADER;

L_FLDS FIELD_DESCRIPTOR_ARRAY;

L_ROW ROWARRAY;

BEGIN

L_BFILE := BFILENAME( P_DIR, P_FILE );

DBMS_LOB.FILEOPEN( L_BFILE );

GET_HEADER( L_BFILE, L_OFFSET, L_HDR, L_FLDS );

IF ( P_SHOW ) THEN

SHOW( L_HDR, L_FLDS, P_TNAME, P_CNAMES, L_BFILE );

ELSE

DBMS_SQL.PARSE( G_CURSOR, BUILD_INSERT(P_TNAME,P_CNAMES,L_FLDS),

DBMS_SQL.NATIVE );

FOR I IN 1 .. L_HDR.NO_RECORDS

LOOP

L_ROW         := GET_ROW( L_BFILE, L_OFFSET, L_HDR, L_FLDS );

IF ( L_ROW(0) <> ‘*’ ) — deleted record

THEN

FOR I IN 1..L_HDR.NO_FIELDS

LOOP

DBMS_SQL.BIND_VARIABLE( G_CURSOR, ‘:bv’||I, L_ROW(I), 4000 );

END LOOP;

IF ( DBMS_SQL.EXECUTE( G_CURSOR ) <> 1 ) THEN

RAISE_APPLICATION_ERROR( -20001, ‘Insert failed ‘ || SQLERRM );

END IF;

END IF;

END LOOP;

END IF;

DBMS_LOB.FILECLOSE( L_BFILE );

EXCEPTION

WHEN OTHERS THEN

IF ( DBMS_LOB.ISOPEN( L_BFILE ) > 0 ) THEN

DBMS_LOB.FILECLOSE( L_BFILE );

END IF;

RAISE;

END;

PROCEDURE PUT_HEADER(

P_TNAME  IN VARCHAR2,

P_CNAMES IN VARCHAR2 DEFAULT NULL,

L_HDR    IN OUT DBF_HEADER,

VFLDS    IN OUT FIELD_DESCRIPTOR_ARRAY)

IS

V_VALUE_LIST STRTABLETYPE;

VCURSOR VARCHAR2(4000);

TYPE RC

IS

REF

CURSOR;

COL_CUR RC;

I     INTEGER:=0;

L_CNT NUMBER;

BEGIN

BEGIN

SELECT

COUNT(*)

INTO

L_CNT

FROM

USER_TAB_COLS

WHERE

TABLE_NAME=UPPER(P_TNAME);

END;

IF L_CNT       > 0 THEN

IF P_CNAMES IS NOT NULL THEN

VCURSOR   :=

‘select substr(column_name,1,12),

case data_type

when ”DATE” then ”D”

when ”NUMBER” then ”N”

else ”C” end ,

case data_type

when ”NUMBER” then NVL(data_precision,22)

when ”DATE” then 8

else data_length end,

case data_type

when ”NUMBER” then data_scale

end ,

column_name   from user_tab_cols

where column_name IN (select * from TABLE (cast(str2tbl(UPPER(”’

||P_CNAMES||”’))

as strTableType)))

and   table_name=”’

||UPPER(P_TNAME)||”’

order by column_id’;

ELSE

VCURSOR:=

‘select SUBSTR(column_name,1,12),

case data_type

when ”DATE” then ”D”

when ”NUMBER” then ”N”

else ”C” end ,

case data_type

when ”NUMBER” then NVL(data_precision,22)

when ”DATE” then 8

else data_length end,

case data_type

when ”NUMBER” then data_scale

end ,

column_name

from user_tab_cols

where table_name=”’

||UPPER(P_TNAME)||”’

order by column_id’;

END IF;

ELSE

IF P_CNAMES IS NOT NULL THEN

VCURSOR   :=

‘select substr(column_name,1,12),

case data_type

when ”DATE” then ”D”

when ”NUMBER” then ”N”

else ”C” end ,

case data_type

when ”NUMBER” then NVL(data_precision,22)

when ”DATE” then 8

else data_length end,

case data_type

when ”NUMBER” then data_scale

end ,

column_name   from ALL_TAB_COLUMNS

where column_name IN (select * from TABLE (cast(str2tbl(UPPER(”’

||P_CNAMES||”’))

as strTableType)))

and   table_name=”’

||UPPER(P_TNAME)||”’

order by column_id’;

ELSE

VCURSOR:=

‘select SUBSTR(column_name,1,12),

case data_type

when ”DATE” then ”D”

when ”NUMBER” then ”N”

else ”C” end ,

case data_type

when ”NUMBER” then NVL(data_precision,22)

when ”DATE” then 8

else data_length end,

case data_type

when ”NUMBER” then data_scale

end ,

column_name

from ALL_TAB_COLUMNS

where table_name=”’

||UPPER(P_TNAME)||”’

order by column_id’;

END IF;

END IF;

OPEN COL_CUR FOR VCURSOR;

LOOP

I:=I+1;

FETCH

COL_CUR

INTO

VFLDS(I).NAME,

VFLDS(I).TYPE,

VFLDS(I).LENGTH,

VFLDS(I).DECIMALS,

VFLDS(I).FNAME;

EXIT

WHEN COL_CUR%NOTFOUND;

END LOOP;

CLOSE COL_CUR;

L_HDR.VERSION   :=’03’;

L_HDR.YEAR      :=TO_NUMBER(TO_CHAR(SYSDATE,’yyyy’))-1900;

L_HDR.MONTH     :=TO_NUMBER(TO_CHAR(SYSDATE,’mm’));

L_HDR.DAY       :=TO_NUMBER(TO_CHAR(SYSDATE,’dd’));

L_HDR.REC_LEN   :=1; — to be set later

L_HDR.NO_FIELDS :=VFLDS.COUNT;

L_HDR.HDR_LEN   :=TO_CHAR((L_HDR.NO_FIELDS*32)+33,’FM000x’);

END;

PROCEDURE PUT_ROWS(

P_TNAME        IN VARCHAR2,

P_WHERE_CLAUSE IN VARCHAR2 DEFAULT ‘1=1 ‘,

VROW           IN OUT ROWARRAY,

VFLDS          IN FIELD_DESCRIPTOR_ARRAY)

IS

TYPE RC

IS

REF

CURSOR;

CUR RC;

I INTEGER:=0;

VSELECTLIST CLOB;–VARCHAR2(32767);

V_CUR CLOB;      –VARCHAR2(32767);

V_CNT NUMBER := 0;

BEGIN

FOR L IN 1..VFLDS.COUNT

LOOP

V_CNT         := V_CNT+1;

IF V_CNT       =1 THEN

VSELECTLIST := VSELECTLIST||ITE(L!=1,’||’,”)||

‘to_clob(utl_raw.cast_to_raw(rpad(NVL(TRIM(‘||

CASE

WHEN VFLDS(L).TYPE=’N’ THEN

‘to_char(‘ || VFLDS(L).FNAME||’)’

END ||

CASE

WHEN VFLDS(L).TYPE=’N’ THEN

‘)’

END ||

CASE

WHEN VFLDS(L).TYPE=’D’ THEN

‘to_char(‘||VFLDS(L).FNAME||’,’||CHR(39)||’yyyymmdd’||CHR(39)||’)’

END||

CASE

WHEN VFLDS(L).TYPE=’D’ THEN

‘)’

END ||

CASE

WHEN VFLDS(L).TYPE=’C’ THEN

VFLDS(L).FNAME||’)’

END ||’,” ”),’||VFLDS(L).LENGTH||’,” ”)))’;

ELSE

VSELECTLIST := VSELECTLIST||ITE(L!=1,’||’,”)||

‘utl_raw.cast_to_raw(rpad(NVL(TRIM(‘||

CASE

WHEN VFLDS(L).TYPE=’N’ THEN

‘to_char(‘ || VFLDS(L).FNAME||’)’

END ||

CASE

WHEN VFLDS(L).TYPE=’N’ THEN

‘)’

END ||

CASE

WHEN VFLDS(L).TYPE=’D’ THEN

‘to_char(‘||VFLDS(L).FNAME||’,’||CHR(39)||’yyyymmdd’||CHR(39)||’)’

END||

CASE

WHEN VFLDS(L).TYPE=’D’ THEN

‘)’

END ||

CASE

WHEN VFLDS(L).TYPE=’C’ THEN

VFLDS(L).FNAME||’)’

END ||’,” ”),’||VFLDS(L).LENGTH||’,” ”))’;

END IF;

V_CNT := NULL;

END LOOP;

V_CUR:=’select ‘||VSELECTLIST||’ from ‘||P_TNAME||’ where ‘||P_WHERE_CLAUSE

;

DBMS_OUTPUT.PUT_LINE (V_CUR);

OPEN CUR FOR V_CUR;

LOOP

I:=I+1;

FETCH

CUR

INTO

VROW(I);

EXIT

WHEN CUR%NOTFOUND;

END LOOP;

CLOSE CUR;

END;

PROCEDURE DUMP_TABLE(

P_DIR          IN VARCHAR2,

P_FILE         IN VARCHAR2,

P_TNAME        IN VARCHAR2,

P_CNAMES       IN VARCHAR2 DEFAULT NULL,

P_WHERE_CLAUSE IN VARCHAR2 DEFAULT ‘ 1=1 ‘)

IS

L_HDR DBF_HEADER;

VFLDS FIELD_DESCRIPTOR_ARRAY;

VROW ROWARRAY;

V_OUTPUTFILE UTL_FILE.FILE_TYPE;

VCOUNT     INT;

VSTARTTIME DATE;

VENDTIME   DATE;

V_CNT      NUMBER:=20;

BEGIN

DBMS_OUTPUT.ENABLE(1000000);

VSTARTTIME:=SYSDATE;

PUT_HEADER(P_TNAME,P_CNAMES,L_HDR,VFLDS);

PUT_ROWS(P_TNAME,P_WHERE_CLAUSE,VROW,VFLDS);

V_OUTPUTFILE := UTL_FILE.FOPEN(P_DIR,P_FILE,’wb’,32767);

FOR I IN 1..VFLDS.COUNT

LOOP

L_HDR.REC_LEN:=L_HDR.REC_LEN+VFLDS(I).LENGTH;

END LOOP;

L_HDR.REC_LEN    :=TO_CHAR(TO_NUMBER(L_HDR.REC_LEN),’FM000x’);

L_HDR.REC_LEN    :=SUBSTR(L_HDR.REC_LEN,-2)|| SUBSTR(L_HDR.REC_LEN,1,2);

L_HDR.NO_RECORDS :=TO_CHAR(VROW.COUNT,’FM0000000x’);

L_HDR.NO_RECORDS :=SUBSTR(L_HDR.NO_RECORDS,-2)|| SUBSTR(L_HDR.NO_RECORDS,5,2)

|| SUBSTR(L_HDR.NO_RECORDS,3,2)|| SUBSTR(L_HDR.NO_RECORDS,1,2);

L_HDR.HDR_LEN:=SUBSTR(L_HDR.HDR_LEN,-2)|| SUBSTR(L_HDR.HDR_LEN,1,2);

UTL_FILE.PUT_RAW(V_OUTPUTFILE, RPAD(L_HDR.VERSION||TO_CHAR(L_HDR.YEAR,’FM0x’)

||TO_CHAR(L_HDR.MONTH,’FM0x’)|| TO_CHAR(L_HDR.DAY,’FM0x’)||L_HDR.NO_RECORDS||

L_HDR.HDR_LEN|| L_HDR.REC_LEN,64,’0′));

FOR I IN 1..VFLDS.COUNT

LOOP

UTL_FILE.PUT_RAW(V_OUTPUTFILE,UTL_RAW.CAST_TO_RAW(TO_CLOB(VFLDS(I).NAME))||

REPLACE(RPAD(’00’,12-LENGTH(TO_CLOB(VFLDS( I).NAME)),’#’),’#’,’00’)||

UTL_RAW.CAST_TO_RAW(TO_CLOB(VFLDS(I).TYPE))||’00000000’|| TO_CHAR(VFLDS(I)

.LENGTH,’FM0x’)||’000000000000000000000000000000′);

END LOOP;

UTL_FILE.PUT_RAW(V_OUTPUTFILE,’0D’);

FOR I IN 1..VROW.COUNT

LOOP

IF ( MOD(I,10) = 0 ) THEN

UTL_FILE.FFLUSH(V_OUTPUTFILE);

UTL_FILE.FCLOSE( V_OUTPUTFILE);

V_OUTPUTFILE := UTL_FILE.FOPEN(P_DIR,P_FILE,’AB’,32767);

IF (I         = 10) THEN

UTL_FILE.PUT_RAW(V_OUTPUTFILE,’20’||VROW(I),TRUE);

ELSE

UTL_FILE.PUT_RAW(V_OUTPUTFILE,’20’||VROW(I),TRUE);

END IF;

ELSE

UTL_FILE.PUT_RAW(V_OUTPUTFILE,’20’||VROW(I),TRUE);

END IF;

END LOOP;

UTL_FILE.PUT_RAW(V_OUTPUTFILE,’20’,TRUE);

IF UTL_FILE.IS_OPEN(V_OUTPUTFILE ) THEN

UTL_FILE.FCLOSE(V_OUTPUTFILE);

END IF;

VENDTIME:=SYSDATE;

END;

END;

<< Ends>>

Fig 2: Package

Summary

 This Post described procedure will help us to generate Database File (DBF) in oracle directory through PL/SQL.

 

Got any queries?

Do drop a note by writing us at doyen.ebiz@gmail.com or use the comment section below to ask your questions.

Recent Posts

Start typing and press Enter to search