Spool缓冲池技术导出oracle数据为文本文件
利用Oracle中的Spool缓冲池技术可以实现Oracle数据导出到文本文件。
1、在Oracle PL/SQL中输入缓冲开始命令,并指定输出的文件名:
spool d:/output.txt
2、
set heading off --去掉字段名
set time off echo off head off --此行设置不计算时间 不显示sql语句 不每隔几行现一下列名
set pagesize 0 --去掉没格几行就显示一下的空行或多余的空格
set trims on --去掉全部空格,默认长度不够填充空格
set feedback off --不显示选择行数 不能和上一行和在一起
3、在命令行中随便输入你的SQL查询:
select mobile from customer;
select mobile from client;
……
3、在命令行中输入缓冲结果命令:
spool off;
则系统将缓冲池中的结果都输出到"output.txt"文件中,以TAB键分隔!
-----------------------------------------------------------------
ksh:
runlog=p_divide_001.log
nohup sqlplus " datatrans/hw@szdb1"<<!>/dev/null 2>&1 &
set serveroutput on
set timing on
set time on
spool $runlog
set autocommit on;
exec P_DIVIDE_INDEX_new(755,'CM_SUBS_SERVICE','SUBSID','P_DEL_DOUBLE_OPEN');
commit;
spool off
!
或者:
sqlplus -s $v_dest_tns_user/$v_dest_tns_pswd@$v_dest_tns_db << EOF | grep "DATA.VALUE" | while read s1 s2
set linesize 512 pagesize 512 head off
select 'DATA.VALUE' "FIELDNAME",
decode(data_type,'DATE', column_name||' date ''yyyy-mm-dd hh24:mi:ss'' '||
decode(column_id,$v_max_column_id, '',','),
'VARCHAR2', column_name||' char('||to_char(data_length)||')'||
decode(column_id,$v_max_column_id, '',','),
column_name|| decode(column_id,$v_max_column_id, '',','))
from all_tab_columns
where owner=upper('$v_dest_tns_user') and table_name=upper('$v_table_name')
order by column_id;
EOF
do
echo $s2 >> ./$v_datafile_name.ctl
done
----------------
sqlplus -s datatrans/hw@szdb1 <<EOF >sql.log
set linesize 1024 pagesize 512 head off
select * from dt_region;
EOF
SQL> set echo on --设置运行命令是是否显示语句
SQL> set feedback on --设置显示“已选择XX行”
SQL> set colsep | --设置列与列之间的分割符号
SQL> set pagesize 10 --设置每一页的行数
SQL> set serveroutput on --设置允许显示输出类似dbms_output
SQL> set heading on --设置显示列名
SQL> set timing on --设置显示“已用时间:XXXX”
SQL> set time on --设置显示当前时间
SQL> set autotrace on --设置允许对执行的sql进行分析
set verify off --可以关闭和打开提示确认信息old 1和new 1的显示.
set colsep '' --域输出分隔符
set linesize 4000 --输出一行字符个数,缺省为80
set pagesize 0 --输出每页行数,缺省为24,为了避免分页,可设定为0。
set num 16(或者set numwidth 16) --输出number类型域长度,缺省为10
set trimspool on --去除重定向(spool)输出每行的拖尾空格,缺省为off
set heading off --输出域标题,缺省为on
set feedback off --回显本次sql命令处理的记录条数,缺省为on
set termout off; --显示脚本中的命令的执行结果,缺省为on
set timing off; --显示每条sql命令的耗时,缺省为off
set trimout on; --去除标准输出每行的拖尾空格,缺省为off
set echo off --显示start启动的脚本中的每个sql命令,缺省为on
PS:其实我在项目中做数据的导出都不会自己写这样的spool代码,直接用工具拉(最方便最简单的肯定是最好的方法 啦,不过原理你还是要懂的),所谓的工具,也就是别人用C++或SHELL写的一个封装程序包;目前我自己用的感觉很方便(华为电信割接项目基本都用这工 具),直接输入你想导出的sql,然后带上username,password,tns连接串就可以了。而且这工具还有很多兼容版 本,XP,liunx,unix,AIX,HP各平台下面基本都可以跑(非常佩服作者的聪明才智,感谢他的无私分享)。这里我就不传这小工具了,有需要的 可以单独Q我,或email:runming918@163.com