如何调整SQLPLUS脚本输出格式,使其呈现为规范的统一表格样式?
SQLPlus 表格输出格式化优化方案
核心优化逻辑
SQLPlus 默认输出格式未做会话参数适配时,会受默认行宽、页长限制,出现表头折行重复、数据错位问题,通过在SQL脚本开头添加以下会话配置即可解决:
需添加的配置项说明
SET LINESIZE 200:设置单行最大宽度为200字符,需大于所有列宽度总和,避免单行内容被折行拆分SET PAGESIZE 0:关闭分页逻辑,仅打印一次表头,解决表头重复问题SET TRIMSPOOL ON:自动裁剪行尾多余空格,减少冗余空白SET TAB OFF:使用空格而非制表符对齐内容,避免不同编辑器下制表符宽度不一致导致错位SET FEEDBACK OFF:关闭查询结束后的行数提示,保持表格内容纯净- 单独指定每列输出格式,解决表头折行、列宽不足问题:
COLUMN ARCHIVEID FORMAT A20:设置ARCHIVEID列为字符型,宽度20字符,可根据实际ARCHIVEID长度调整数值COLUMN "Number of Documents" FORMAT 99999999:设置文档计数字列为数值型,最大支持8位整数COLUMN "Documents Size in MB" FORMAT 99999999.99:设置容量列数值格式,匹配查询中保留2位小数的逻辑
优化后完整SQL脚本
-- 会话格式配置 SET LINESIZE 200 SET PAGESIZE 0 SET TRIMSPOOL ON SET TAB OFF SET FEEDBACK OFF SET HEADING ON -- 单独配置列格式 COLUMN ARCHIVEID FORMAT A20 COLUMN "Number of Documents" FORMAT 99999999 COLUMN "Documents Size in MB" FORMAT 99999999.99 -- 输出到指定文件 spool "\\PathToPutOutputInTextFile\test.txt" -- 原查询逻辑 SELECT a.ARCHIVEID, count(*) as "Number of Documents", ROUND(SUM(c.CLENGTH)/1024/1024,2) as "Documents Size in MB" FROM ds_doc d INNER JOIN ds_arch a ON d.ARCHIVENO = a.ARCHIVENO INNER JOIN ds_comp c ON d.DOCIDNO = c.DOCIDNO GROUP BY a.ARCHIVEID; spool off; EXIT;
批处理脚本修正
原脚本中-path为无效参数,sqlplus没有该参数,输出路径已在SQL脚本的spool中指定,修正后批处理内容如下:
sqlplus usr/pass@nameofdb @D:\IXTENT\monitoring\ASCheck.sql
如果需要通过批处理动态指定输出路径,可以使用命令行重定向写法:
sqlplus -S usr/pass@nameofdb @D:\IXTENT\monitoring\ASCheck.sql > "\\PathToPutOutputInTextFile\test.txt"
其中-S参数为静默模式,不会打印sqlplus的登录 banner 信息,输出内容更干净。
内容的提问来源于stack exchange,提问作者Dusan Stefanco
相关产品推荐
相关产品推荐

