Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> Re: Advice on Dumping a Cursor to a Text file..
Question: as this is one of the most frequently appearing issues, if this is not up on your website, could you add this -maybe properly indented- to your website?
Thanks,
Sybrand Bakker, Oracle DBA
Thomas J. Kyte <tkyte_at_us.oracle.com> wrote in message
news:8c4vm5$grb$1_at_nnrp1.deja.com...
> In article <8c2c3p$nkc$1_at_nnrp1.deja.com>,
> tim.mcconechy_at_runtime.dk wrote:
> > HI!
> >
> > I want to make a generic Procedure in PL\SQL using UTL_FILE
> >
> > That will accept a cursor and
> > Create a ; delimited text file based on it's contents.
> >
> > Has anyone out there had experience with this.
> >
> > The trick is to convert all file types to char and
> > the fact that I don't know how many columns or what the column types
> > would be..
> >
> > Can anyone give me any advice on how to approch this ...
> >
> > Thanks!
> >
> > Sent via Deja.com http://www.deja.com/
> > Before you buy.
> >
> something like this:
> create or replace function dump_csv( p_query in varchar2,
> p_separator in varchar2
> default ',',
> p_dir in varchar2 ,
> p_filename in varchar2 )
> return number
> is
> l_output utl_file.file_type;
> l_theCursor integer default dbms_sql.open_cursor;
> l_columnValue varchar2(2000);
> l_status integer;
> l_colCnt number default 0;
> l_separator varchar2(10) default '';
> l_cnt number default 0;
> begin
> l_output := utl_file.fopen( p_dir, p_filename, 'w' );
> dbms_sql.parse( l_theCursor, p_query, dbms_sql.native );
> for i in 1 .. 255 loop
> begin
> dbms_sql.define_column( l_theCursor, i, l_columnValue,
> 2000 );
> l_colCnt := i;
> exception
> when others then
> if ( sqlcode = -1007 ) then exit;
> else
> raise;
> end if;
> end;
> end loop;
> dbms_sql.define_column( l_theCursor, 1, l_columnValue, 2000 );
> l_status := dbms_sql.execute(l_theCursor);
> loop
> exit when ( dbms_sql.fetch_rows(l_theCursor) <= 0 );
> l_separator := '';
> for i in 1 .. l_colCnt loop
> dbms_sql.column_value( l_theCursor, i, l_columnValue );
> utl_file.put( l_output, l_separator || l_columnValue );
> l_separator := p_separator;
> end loop;
> utl_file.new_line( l_output );
> l_cnt := l_cnt+1;
> end loop;
> dbms_sql.close_cursor(l_theCursor);
> utl_file.fclose( l_output );
> return l_cnt;
> end dump_csv;
> /
> create or replace procedure test_dump_csv
> as
> l_rows number;
> begin
> l_rows := dump_csv( 'select * from all_users where rownum <
> 25', ',', '/tmp', 'test.dat' );
> end;
> /
> --
> Thomas Kyte tkyte_at_us.oracle.com
> Oracle Service Industries http://osi.oracle.com/~tkyte/index.html
> --
> Opinions are mine and do not necessarily reflect those of Oracle Corp
>
>
> Sent via Deja.com http://www.deja.com/
> Before you buy.
Received on Sat Apr 01 2000 - 00:00:00 CST
![]() |
![]() |