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 --是否显示替代变量被替代前后的语句
近期更新的文章:
《关于数据治理的读书笔记 - 数据治理、数据管理和数据管控的理解》
文章分类和索引:
以上是关于spool导出格式的问题的主要内容,如果未能解决你的问题,请参考以下文章