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
相关产品推荐
相关产品推荐

