You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL导出文件末尾存在大量空格,如何通过SQL参数解决?

Oracle SQL导出文件末尾多余空格的解决办法

我有如下Oracle SQL脚本:

set pages 0
set head off
set feedback off
set echo off
set termout off
set wrap off
spool /osp/tmp/bangdd/dumpthe.dump
select a.SERNUM ||','|| b.AMOUNT||','|| b.TOPPF||','|| a.RFPROF from voucher a, SCRATCHP b where b.ri=a.RFPROF and a.sernum='000010263549703';
spool off

使用cat -A查看导出的dumpthe.dump文件,内容如下:

linus> cat -A dumpthe.dump
000010263549703,20000,020,6                                                     $

可以看到从字符“6”到行尾$之间存在大量空格,导致文件体积偏大。我可以用sed命令去除这些空格,但想知道有没有Oracle SQL自身的配置选项能解决这个问题?

我尝试修改查询语句,在末尾加了逗号:

set pages 0
set head off
set feedback off
set echo off
set termout off
set wrap off
spool /osp/tmp/bangdd/dumpthe.dump
select a.SERNUM ||','|| b.AMOUNT||','|| b.TOPPF||','|| a.RFPROF || ',' from voucher a, SCRATCHP b where b.ri=a.RFPROF and a.sernum='000010263549703';
spool off

结果导出文件依然有大量空格:

linus> cat -A dumpthe.dump
000010263549703,20000,020,6,                                                    $

解决方案

问题根源是SQL*Plus默认会按列的最大宽度输出,即便用字符串拼接,结果仍会被填充到当前linesize设置的宽度。通过以下Oracle参数调整即可解决:

  • 开启trimspool on:这是最直接的办法,它会自动去除spool文件中每行末尾的空格。在脚本开头添加该配置:

    set trimspool on
    
  • 按需调整linesize(可选):如果linesize设置过大,可根据实际输出内容的长度设置合适值,避免不必要的资源占用,例如:

    set linesize 50
    

修改后的完整脚本:

set pages 0
set head off
set feedback off
set echo off
set termout off
set wrap off
set trimspool on
set linesize 50
spool /osp/tmp/bangdd/dumpthe.dump
select a.SERNUM ||','|| b.AMOUNT||','|| b.TOPPF||','|| a.RFPROF from voucher a, SCRATCHP b where b.ri=a.RFPROF and a.sernum='000010263549703';
spool off

调整后导出的文件将不再包含末尾的多余空格。

内容的提问来源于stack exchange,提问作者Đặng Đình Bằng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:16:15