spool导出格式的问题

Posted bisal(Chen Liu)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spool导出格式的问题相关的知识,希望对你有一定的参考价值。

最近朋友提了个问题,通过sqlplus的spool导出数据,格式乱了,如下所示,

表中包含了几十个字段,包括VARCHAR2和NUMBER类型,

我们在sqlplus中,经常用到这几个显示配置参数,

(1) 设置行宽,set linesize 200,表示行宽被设置为200个字符。

(2) 设置列宽,column name format a40,设置name列为40个字符,a表示alphanumeric,是字符的意思。

(3) 设置页面记录,set pagesize 20,设置每20行为一页。

查询结果中,每列的宽度默认是根据该列定义的宽度显示的,例如name列定义20个字符,那么该列就以所定义的20为宽度,除非通过col name format a15限制该列的宽度。

但是因为sqlplus命令窗口的宽度有限,所以有的列定义为5000字符的,其最宽只能按照sqlplus命令行窗口的宽度来显示。

如下表,有字段定义为VARCHAR2(128),有的则定义为VARCHAR2(1),

temporary、secondary这几个字段值小,只定义了VARCHAR2(1),行的宽度会以字段的大小来定义展示,

owner字段值就很大,128个字符,其最宽只能按照sqlplus命令行窗口的宽度来显示,show linesize是80,owner显示的宽度是80,不能是128,

如果将temporary、secondary、owner混合查询,就出现了折行,

如果设置owner列宽度,就可以整行显示,

因此对这个需求,如果是检索所有的字段,确实展示会乱,如果就需要看导出的文本文件,可以选择col设置各个列宽,但是比较繁琐。再追问需求,其实他是想从Oracle导出数据到TeraData,实际不需要看文本文件,其实就可以定好输入的接口格式(或者通过程序,或者通过fastload),导出规定格式的数据,实现这个需求。

P. S. sqlplus的显示控制参数很多,可以参考,

set colsep' '      --行的标题列的分隔符
set linesize(line) --设置sqlplus输出的最大行宽 
set pagesize       --设置页面的最大行数 缺省为24,为了避免分页,可设定为0
set serveroutput on|off
set echo on        --显示文件中的每条命令及其执行结果,缺省为on 
set echo off       --不显示文件中的命令,只显示其执行结果
set term on        --查询结果既显示于假脱机文件中(spool指定输出的文件),又在SQLPLUS中显示
set term off       --查询结果仅仅显示于假脱机文件中(spool指定输出的文件)
set heading off    --让结果行的标题不显示,缺省为on 
set heading on     --让结果行的标题显示
set trimout on    --去除标准输出每行的拖尾空格,缺省为off 
set trimspool on   --去除重定向(spool)输出每行的拖尾空格,缺省为off 
set timing off     --显示每条sql命令的耗时,缺省为off 
set verify off     --是否显示替代变量被替代前后的语句

近期更新的文章:

最近碰到的一些问题

关于数据治理的读书笔记 - 什么是数据治理?

关于数据治理的读书笔记 - 数据治理、数据管理和数据管控的理解

通过Java得到语句的执行计划

MySQL时间分区的实现

文章分类和索引:

公众号900篇文章分类和索引

以上是关于spool导出格式的问题的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本中spool生成excel文件写法

oracle数据导出spool方式,中文出现乱码是啥原因?

如何在 Oracle APEX 中设置 SPOOL 脚本以将视图数据导出为 CSV?

使用spool导出数据

导出数据库数据成txt格式

Linux sh脚本用spool导出oracle数据库指定表表数据