Re: Tool for CSV dump?
Date: Tue, 28 Oct 2008 12:49:55 -0000
Message-ID: <MPG.23711acffcf2251d989696@News.Individual.NET>
In article <ge70m2$3jc$1_at_registered.motzarella.org>,
gogala.mladen_at_gmail.com says...>
> Tellie wrote:
>
> > Hi experts,
> >
> > are there tools to make a fast dump of complete databases to CSV?
> > Without needing any additional licenses from Oracle...?
> >
> > TIA Tellie
>
>
> Dump complete database to CSV??? I am not sure about that, but I have a
> script that dumps a table or a result of a query to a CSV file. It is
> written in Perl and requires the corresponding Perl modules.
Here is a function for any query. It is based on a Tom Kyte example:
- DUMP_CSV
function dump_csv( p_query in varchar2, p_separator in varchar2 default ',', p_filename in varchar2 ) return number -- - this code is courtesy of Tom Kyte of Oracle, modified by jeremy0505 -- is l_output utl_file.file_type; l_theCursor integer default dbms_sql.open_cursor; l_columnValue varchar2(4000); l_status integer; l_colCnt number default 0; l_separator varchar2(10) default ''; l_cnt number default 0;
l_descTbl dbms_sql.desc_tab;
begin
begin
l_output := utl_file.fopen( 'UTFD_EXTRACT', p_filename, 'w',32000 ); exception when others then dbms_output.put_line('Error opening file with utl_file'); raise;
end;
-- -- column headings first --
dbms_sql.parse( l_theCursor, p_query, dbms_sql.native );
dbms_sql.describe_columns( l_theCursor,
l_colCnt, l_descTbl );for i in 1..l_colCnt
loop
if i = 1 then utl_file.put( l_output, l_descTbl(i).col_name); else utl_file.put( l_output, p_separator || l_descTbl(i).col_name ); end if;
end loop;
utl_file.new_line( l_output );
-- -- now to the meat -- 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,
4000 );
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 ); l_columnValue := replace(l_columnValue,''',''''); l_columnValue := replace(l_columnValue,'&','&'); l_columnValue := replace(l_columnValue,'"',''''); l_columnValue := replace(l_columnValue,chr(13),null); l_columnValue := replace(l_columnValue,chr(10),' '); l_columnValue := '"'||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;
-- jeremyReceived on Tue Oct 28 2008 - 07:49:55 CDT