oracle导出数据到txt

sdxrh2005

贡献于2012-11-16

字数:3117 关键词: Oracle 数据库服务器

方法一:使用SQLPlus的spool命令 操作步骤 1. 新建一个脚本文件,存放起来,如D:\spool.sql,具体代码如下 Sql代码 1.set echo off --在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句 2.set feedback off --是否显示当前sql语句查询或修改的行数 3.set newpage none --会在页和页之间没有任何间隔 4.set verify off -- 5.set pagesize 0 --分多少页 6.set term off --在用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间,设置set termspool off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。 7.set trims on --将SPOOL输出中每行后面多余的空格去掉 8.set linesize 600 --设置屏幕显示行宽,默认100 9.set heading off --禁止输出列标题 10.set timing off --默认为OFF,设置查询耗时,可用来估计SQL语句的执行时间,测试性能 11.set numwidth 38 12.SPOOL D:\aaa.txt 13.select UserTelNo || ',' || to_char(ReceiveTime,'yyyy-MM-dd HH24:MI:SS') || ',' || UserContent || ',' || ReplyContent FROM LogSMSHall_Mutual WHERE rownum<=100; 14.SPOOL OFF set echo off --在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句 set feedback off --是否显示当前sql语句查询或修改的行数 set newpage none --会在页和页之间没有任何间隔 set verify off -- set pagesize 0 --分多少页 set term off --在用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间,设置set termspool off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。 set trims on --将SPOOL输出中每行后面多余的空格去掉 set linesize 600 --设置屏幕显示行宽,默认100 set heading off --禁止输出列标题 set timing off --默认为OFF,设置查询耗时,可用来估计SQL语句的执行时间,测试性能 set numwidth 38 SPOOL D:\aaa.txt select UserTelNo || ',' || to_char(ReceiveTime,'yyyy-MM-dd HH24:MI:SS') || ',' || UserContent || ',' || ReplyContent FROM LogSMSHall_Mutual WHERE rownum<=100; SPOOL OFF 注意如果有clob字段的话,最好用to_char函数进行转换。 2. 用sqlplus登录到oracle数据库 如果是在数据库本机,直接在命令行(WIN+R->CMD)窗口,输入“SQLPlus [用户名]/[密码]”即可。 如果远程登录,在命令行中输入“SQLPlus [用户名]/[密码]@[数据库IP地址:监听端口号]/[数据库实例名称] ”,回车即可。如“sqlplus Ajita/1@192.168.85.136:1521/orcl”。 3. 执行脚本文件 在SQLPlus命令窗口中执行步骤1中的脚本文件。命令方式为“@[脚本文件位置]”,如“@D:\spool.sql” 优点:简单易用 缺点:不容易封装成存储过程 方法二:使用UTL_FILE包的文件操作命令 操作步骤(只需要一步,也可以封装成存储过程) 编写PL/SQL过程,导出到txt即可。 Sql代码 1.DECLARE 2.row_result varchar2(1024); 3.selectsql varchar2(1024); 4.qrycursor SYS_REFCURSOR; 5.txt_handle UTL_FILE.file_type; 6.BEGIN 7. selectsql := ' select bizname ||'' ''|| bizstatus from bizbusinessbaseinfo '; 8. txt_handle := UTL_FILE.FOPEN('D:/UTL','a.txt','w'); 9. open qrycursor for selectsql; 10. loop 11. fetch qrycursor into row_result; 12. exit when qrycursor%notfound; 13. UTL_FILE.PUT_LINE(txt_handle,row_result); 14. end loop; 15. --关闭游标 16. close qrycursor; 17. UTL_FILE.FCLOSE(txt_handle); 18.end; DECLARE row_result varchar2(1024); selectsql varchar2(1024); qrycursor SYS_REFCURSOR; txt_handle UTL_FILE.file_type; BEGIN selectsql := ' select bizname ||'' ''|| bizstatus from bizbusinessbaseinfo '; txt_handle := UTL_FILE.FOPEN('D:/UTL','a.txt','w'); open qrycursor for selectsql; loop fetch qrycursor into row_result; exit when qrycursor%notfound; UTL_FILE.PUT_LINE(txt_handle,row_result); end loop; --关闭游标 close qrycursor; UTL_FILE.FCLOSE(txt_handle); end; 注意事项: 如果没有设置参数utl_file_dir参数,本方法会报ora 29280的错误,解决方案有两种。 1. 设置utl_file_dir参数,两种方式: a) 在init.ora中设置,直接修改文件即可 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:\temp,'c:\my temp' 设置完必须重新启动数据库 2. 创建自己的目录(不需要重启数据库) 在命令行中执行命令create or replace directory MY_DIR as 'c:/abc';即可。然后调用的时候,把frw:=utl_file.fopen('c:\abc','emp.txt','w');改成frw:=utl_file.fopen('MY_DIR','emp.txt','w');注意MY_DIR要大写。 优点:容易封装成存储过程 缺点:要使用UTL_FILE配置,稍微复杂点

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ]
2 人已下载

下载文档

相关文档