oracle导出数据到txt文件方法整理
select 'sqlplus username/pswd@tns @spool_data.sql '||owner||' '||table_name from dba_tables where owner=upper('&schema_name') ;
将下面的脚本内容,放入到spool_data.sql中
set pagesize 0
-- This script dumps a table to a comma delimited ASCII file and
-- also builds a control file and a parameter file for SQL*Loader.
set trimspool on
set serverout on
clear buffer
undef dumpfile
undef dumptable
undef dumpowner
var maxcol number
var linelen number
var longlen number
var dumpfile char(40)
col column_id noprint
set pages 0 feed off termout on echo off verify off
set timing off
var dumpowner VARCHAR2
VAR dumptable VARCHAR2
define dumpowner = &1
define dumptable = &2;
begin
select max (column_id)
into :maxcol
from all_tab_columns
where table_name = rtrim (upper ('&dumptable')) and
owner = rtrim (upper ('&dumpowner'));
select sum (data_length) + (:maxcol * 3)
into :linelen
from all_tab_columns
where table_name = rtrim (upper ('&dumptable')) and
owner = rtrim (upper ('&dumpowner'));
select max (data_length)
into :longlen
from all_tab_columns
where table_name = rtrim (upper ('&dumptable')) and
owner = rtrim (upper ('&dumpowner'));
end;
/
print linelen
print maxcol
print longlen
spool extract_tmp.sql
select 'set trimspool on' from dual;
select 'set termout off pages 0 heading off echo off' from dual;
select 'set line '||:linelen ||' long '|| :longlen ||' longc ' || :longlen from dual;
select 'set timing off' from dual;
select 'alter session set nls_date_format='||''''||'yyyy-mm-dd hh24:mi:ss'||''';' from dual;
select 'spool '||upper ('&dumptable')||'.txt' from dual;
select 'select'||chr (10) from dual;
select ' '||decode (DATA_TYPE, 'CLOB', 'DBMS_LOB.getlength('||column_name||')','BLOB','DBMS_LOB.getlength('||column_name||')', column_name)||' ||'||''''||chr(124)||''''||' || ', column_id
from all_tab_columns
where table_name = upper ('&dumptable') and
owner = upper ('&dumpowner') and
column_id < :maxcol
union
select ' '||decode (DATA_TYPE, 'CLOB', 'DBMS_LOB.getlength('||column_name||')','BLOB','DBMS_LOB.getlength('||column_name||')', column_name),column_id
from all_tab_columns
where table_name = upper ('&dumptable') and
owner = upper ('&dumpowner') and
column_id = :maxcol
order by 2;
select 'from '||'"'||upper('&dumpowner')||'"'||'.&dumptable;' from dual;
select 'spool off' from dual;
spool off
start extract_tmp.sql
exit
将查出来的,拿出来执行就行了,就会将每张表的数据放入到一个单独的txt中,但是如果表中含有clob,blob的取不出来,还有换行的也会出不来
@spool_data.sql owenr segment_name
。。。
。。。