ORCLE导出大量数据到txt
方法一使用SQLPlus的spool命令
操作步骤
新建一个脚本文件存放起来如D:\spoolsql具体代码如下
?
Sql代码
set echo off
set feedback off
set newpage none
set verify off
set pagesize
?
set term off
set trims on
set linesize
set heading off
set timing off
set numwidth
SPOOL D:\aaatxt
select UserTelNo || || to_char(ReceiveTimeyyyyMMdd HH:MI:SS) || || UserContent || || ReplyContent FROM LogSMSHall_Mutual WHERE rownum<=;
SPOOL OFF
注意如果有clob字段的话最好用to_char函数进行转换
用sqlplus登录到oracle数据库
如果是在数据库本机直接在命令行(WIN+R>CMD)窗口输入SQLPlus [用户名]/[密码]即可
如果远程登录在命令行中输入SQLPlus [用户名]/[密码]@[数据库IP地址:监听端口号]/[数据库实例名称]回车即可如sqlplus Ajita/@:/orcl
执行脚本文件
在SQLPlus命令窗口中执行步骤中的脚本文件命令方式为@[脚本文件位置]如@D:\spoolsql
优点简单易用
缺点不容易封装成存储过程
方法二使用UTL_FILE包的文件操作命令
操作步骤(只需要一步也可以封装成存储过程)
编写PL/SQL过程导出到txt即可
?
Sql代码
DECLARE
row_result varchar();
selectsql varchar();
qrycursor SYS_REFCURSOR;
txt_handle UTL_FILEfile_type;
BEGIN
selectsql := select bizname || || bizstatus from bizbusinessbaseinfo ;
txt_handle := UTL_FILEFOPEN(D:/UTLatxtw);
open qrycursor for selectsql;
loop
fetch qrycursor into row_result;
exit when qrycursor%notfound;
UTL_FILEPUT_LINE(txt_handlerow_result);
end loop;
close qrycursor;
UTL_FILEFCLOSE(txt_handle);
end;
注意事项
如果没有设置参数utl_file_dir参数本方法会报ora 的错误解决方案有两种
设置utl_file_dir参数两种方式
a) 在initora中设置直接修改文件即可
b) 在sqlplus命令行设置
?
alter system set utl_file_dir=* scope=spfile;
注意设置utl_file_dir的要点
utl_file_dir=* 这表示你能操作任何目录尽量不要用
utl_file_dir=d:\ 这表示你能操作d:\目录下的文件但你不能操作d:\目录下的子目录
注意在设置 utl_file_dir=路径时如果路径是长路径名例如c:\my temp目录则你必须加上例如 utl_file_dir=c:\my temp
utl_file_dir可以是多个路径 utl_file_dir=c:\d:\d:\tempc:\my temp
设置完必须重新启动数据库
创建自己的目录(不需要重启数据库)
在命令行中执行命令create or replace directory MY_DIR as c:/abc;即可然后调用的时候把frw:=utl_filefopen(c:\abcemptxtw);改成frw:=utl_filefopen(MY_DIRemptxtw);注意MY_DIR要大写
优点容易封装成存储过程
缺点要使用UTL_FILE配置稍微复杂点