前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spool导出格式的问题

spool导出格式的问题

作者头像
bisal
发布2022-02-09 13:32:34
1.3K0
发布2022-02-09 13:32:34
举报
文章被收录于专栏:bisal的个人杂货铺

最近朋友提了个问题,通过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的显示控制参数很多,可以参考,

代码语言:javascript
复制
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     --是否显示替代变量被替代前后的语句
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/02/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档