Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: Advice on Dumping a Cursor to a Text file..

Re: Advice on Dumping a Cursor to a Text file..

From: Sybrand Bakker <postbus_at_sybrandb.demon.nl>
Date: 2000/04/01
Message-ID: <954602523.24000.1.pluto.d4ee154e@news.demon.nl>#1/1

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

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US