SPOOL 命令使用实例【oracle导出纯文本格式文件】

Stella981
• 阅读 734

SPOOL 命令使用实例【oracle导出纯文本格式文件】

SET echo off              --在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句;

SET feedback off          --是否回显本次sql命令处理的记录条数,缺省为on;

SET heading  off          --是否显示列标题,缺省为on;

SET pagesize 50000        --设置每页有多少行数,缺省为14。当值设为0时,输出内容为一页且不显示列标题,为了避免分页,我们通常可设定为0。
SET termout off           --是否在屏幕上显示输出的内容,或脚本中的命令的执行结果,缺省为on; 

SET trimout on;        --去除标准输出每行后面多余的空格,缺省为off; 

SET timing off            --显示每个sql语句花费的执行时间;

SET trimspool on          --去除重定向(spool)输出每行的拖尾空格,缺省为off;

SET  NULL text            --显示时,用text值代替NULL值;

SET serveroutput off   --是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息;--编写存储过程时,大多会将必要的信息输出;

SET newpage none    --设置页与页之间的分隔{1|n|NONE};当值为0时在每页开头有一个小的黑方框;当值为n时在页和页之间隔着n个空行;当为none时,会在页和页之间没有任何间隔;
SET linesize 1000       --设置一行可以容纳的字符数{80|n};输出内容大于设置的行可容纳的字符数,则折行显示.据实际字符设置,过大导出速度慢;
SET wrap on              --输出行长度大于设置行长度时(用set linesize n命令设置);值为on时,多余的字符另起一行显示,否则多余的字符将被切除,不予显示;

SET verify off            --是否显示替代变量被替代前后的语句; 

SET  colsep' ';    --域输出分隔符;

------------------------------------------------------------------------------------------------------

导出文本数据的建议格式:
SQL*PLUS环境设置--

SET echo off               --在用start命令执行一个sql脚本时,不显示脚本中正在执行的SQL语句

SET heading  off         --不显示字段的名称                 

SET pagesize 0          --设置输出每页行数,为了避免分页,可设定为0。设置为0时,输出内容为一页且不显示列标题具有SET heading  off  包含的功能。

SET newpage none    --页与页之间没有分隔                                        
SET trimout on     --去除标准输出每行后面多余的空格
SET trimspool on        --去除重定向(spool)输出每行的拖尾空格
SET linesize 1000       --设置一行可以容纳的字符数

SET feedback off         --是否回显本次sql命令处理的记录条数,缺省为on;

工作运用时导出文本数据的常用格式:

SET echo off  

SET pagesize 0 

SET feedback off 

SET trimout on 

SET trimspool on  

SET linesize 1000 

spool路径+文件名

需要执行的SQL代码

spool off

注:linesize要稍微设置大些,免得数据被截断,它应和相应的trimspool 结合使用防止导出的文本有太多的尾部空格。但是如果linesize设置太大,会大大降低导出的速度,另外在WINDOWS下导出最好不要用PLSQL导出,速度比较慢,直接用COMMEND下的SQLPLUS命令最小化窗口执行。

实例

要求

①导出的过程不在SQL*PLUS屏幕上显示
②导出的文本中不含有执行的SQL命令
③导出的文本中不含有字段名
④导出的文本中使用逗号(英文)作为字段的分隔符
⑤导出的文本中每行长200个字符
⑥导出的文本中每页999行
⑦导出的文本中每行后面的空格必须被截取
编写脚本txt_format.sql

-set部分设置导出的文本格式
set echo off             --关闭脚本中正在执行的SQL语句的显示
set feedback off         --关闭本次sql命令处理的记录条数,默认为on即去掉最后的已经选择的行数
set verify off           --可以关闭和打开提示确认信息
set heading off          --关闭标题的输出设置为off就去掉了select结果的字段名,只显示数据
set term off             --不在屏幕上输出执行结果
set trimspool on         --将每行后面多余的空格去掉【linesize-实际字符数=多余空格】
set trimout on           --去除标准输出每行后面多余的空格
set linesize 200         --设置每行最多显示200个字符
set pagesize 0         --设置每页最多显示999行记录
set termout off          --屏幕不显示查询数据
--@/home/oracle/leonarding/get_table.sql     --设置导出哪个表里的数据和导出的样子,这是第二种方法
spool ls_test.txt      --where is file_name[.ext] [CRE[ATE]|REP[LACE]|APP[END]]

select rnc_id||'|'||rnc_label_cn||'|'||rnc_label_en from rnc;
--只有关闭spool导出操作,才会在输出文件中看到输出内容,这句话不能写在spool off后面会报错
spool off              
exit

注:请注意上面的两个地方:set部分和spool部分,前者用于设置导出的文本格式,后者再次执行一个sql脚本:get_table.sql进行导出。下面我们再看另一个脚本get_table.sql

select rnc_id||'|'||rnc_label_cn||'|'||rnc_label_en from rnc;

那么我们来看一下结果ls_test.txt

876947945|TJRNC04_260|TJRNC04_260
1128405375|TJRNC03_259|TJRNC03_259
1723122318|TJRNC05_261|TJRNC05_261
4290614068|TJRNC06_262|TJRNC06_262
145277785|TJRNC14_270|TJRNC14_270
96954|TJRNC02_258|TJRNC02_258
96956|TJRNC10_266|TJRNC10_266
96907|TJRNC08_264|TJRNC08_264
96926|TJRNC09_265|TJRNC09_265
96930|TJRNC12_268|TJRNC12_268
96932|TJRNC11_267|TJRNC11_267
96934|TJRNC13_269|TJRNC13_269
96946|TJRNC01_257|TJRNC01_257
96948|TJRNC15_271|TJRNC15_271
96950|TJRNC16_272|TJRNC16_272
96952|TJRNC17_273|TJRNC17_273
96906|TJRNC07_263|TJRNC07_263

以下的文章主要介绍的是如何正确的把Oracle数据导出成Txt 的格式,Oracle数据导出成Txt 在实际应用中的比例还是比较常见的,以下的文章主要是对实际操作方案的描述,以下就是正文的主要内容的描述。
Oracle数据库提供的SQL功能很好很强大,用得越多越觉得自己浅薄无知。

上周做系统演示时需要手工制造一些文本数据充当数据源,想偷偷懒就用了Toad工具直接查询后导出成csv格式。今天正好有点时间,整理了一下思路,用sql去实现文本数据的生成。写了大致框架,有空时再来完善吧。

步骤如下:

新建一个sql脚本 d:\czrk.sql,代码如下: SET echo off

  1. SET feedback off  
  2. SET newpage none  
  3. SET pagesize 50000  
  4. SET linesize 20000  
  5. SET verify off  
  6. SET pagesize 0  
  7. SET term off  
  8. SET trims ON  
  9. SET heading off  
  10. SET trimspool ON  
  11. SET trimout ON  
  12. SET timing off  
  13. SET verify off  
  14. SET colsep |  
  15. spool d:\czrk.txt  
  16. SELECT sfzh || ',' || xm || ',' || xb || ',' 
    || csrq || ',' || mz|| ',' || xzqh|| ',' || jzdz FROM m_czrk WHERE rownum<=10000;  
  17. spool off

  

Oracle数据导出成Txt格式:sqlplus连接上数据库,执行脚本

  1. sqlplus dc/dc@mydb;  
  2. sqlplus>@d:\czrk.sql

 

这样就在d盘下生成了一万条数据了。

以上的相关内容就是对把Oracle数据导出成Txt格式的介绍。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
java中比较两个时间的差值
项目背景1.某篇文稿的发布时间是publishDate,例如:2020072118:00:41。2.现要求判断该篇文稿的发布时间是否在近30天之内。publicstaticlongdayDiff(DatecurrentDate,DatepublishDate){LongcurrentTimecurrentDat
Wesley13 Wesley13
3年前
RAC环境单实例启动数据库收到ORA
     在RAC环境中,如果你在没有启动节点的集群服务的情况下单实例启动数据库,将收到类似如下的报错:\oracle@rhel1u01\$sqlSQL\Plus:Release10.2.0.5.0ProductiononTueApr215:00:272013Copyright(
Stella981 Stella981
3年前
KaliTools说明书+BurpSuit实战指南+SQL注入知识库+国外渗透报告
!(https://oscimg.oschina.net/oscnet/d1c876a571bb41a7942dd9752f68632e.gif"15254461546.gif")0X00KaliLinux Tools中文说明书!(https://oscimg.oschina.net/oscnet/
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这