The quickest and dirtiest way to do this is actually through SQL * Plus:
SQL> set lines 200 SQL> set heading off SQL> set feedback off SQL> spool $HOME/your_table.out SQL> select * from your_table; SQL> spool off
SQL * Plus has some neat if basic reporting features; we can even generate HTML files .
If you have a very long table (many rows) or wide (many columns), you might be better off outputting directly to a file, for example.
declare fh utl_file.file_type; begin fh := utl_file.fopen('TARGET_DIRECTORY', 'your_table.lst', 'W'); for lrec in ( select * from your_table ) loop utl_file.put( fh, id ); utl_file.put( fh, '::' ); utl_file.put( fh, col_1 ); utl_file.put( fh, '::' ); utl_file.put( fh, col_2 ); utl_file.put( fh, '::' ); utl_file.put( fh, to_char ( col_3, 'dd-mm-yyyy hh24:mi:ss' ) ); utl_file.new_line(fh); end loop; utl_file.fclose(fh); end; /
This may sound like a chorus, but PUT () calls can be generated from USER_TAB_COLUMNS. There are a couple of fixes with UTL_FILE, so read the documentation .
You can use the same management structure with DBMS_OUTPUT ....
begin for lrec in ( select * from your_table ) loop dbms_output.put( id ); dbms_output.put( '::' ); dbms_output.put( col_1 ); dbms_output.put( '::' ); dbms_output.put( col_2 ); dbms_output.put( '::' ); dbms_output.put( to_char ( col_3, 'dd-mm-yyyy hh24:mi:ss' ) ); dbms_output.new_line; end loop; end; /
... but if you are going to extract from SQL * Plus, why not use a simpler option?
source share