ORCLE导出大量数据到txt

方法一:使用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  


注意如果有clob字段的话,最好用to_char函数进行转换。 
2. 用sqlplus登录到oracle数据库 
如果是在数据库本机,直接在命令行(WIN+R->CMD)窗口,输入“SQLPlus [用户名]/[密码]”即可。 
如果远程登录,在命令行中输入“SQLPlus [用户名]/[密码]@[数据库IP地址:监听端口号]/[数据库实例名称]”,回车即可。如“sqlplus Ajita/[email protected]: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;  



注意事项: 
如果没有设置参数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配置,稍微复杂点 

你可能感兴趣的:(ORCLE)