【问题标题】:Extra spaces appending in Spooling SQL script in UNIX在 UNIX 中的假脱机 SQL 脚本中附加额外的空格
【发布时间】:2014-01-11 22:51:52
【问题描述】:

我正在尝试生成一个数据文件作为表格的下载,该表格可能是固定格式的。 我已经准备好 SQL。

示例:

SELECT RPAD(ORGANIZATION_ID,10)||RPAD(ORGANIZATION_NAME,100)||RPAD(EMPLOYEE_COUNT,100)
FROM MY_ORGANIZATION_STATE;

我在 SQL Developer 中运行它,然后导出到 Excel。对于 50 条记录的样本。 能够正确获取,格式看起来还可以。

但我需要自动化它,因此我们使用 SQL*Plus 的 spool 命令。 下面是一个sn-p。

set pagesize 100;
set linesize 10000;
set heading off;
spool orgn_output.dat;
@my_script # this has my SQL inside
spool off;

这运行没有任何错误。

但是当我尝试打开文件时,我可以看到,文件内有多余的空格,并且布局不符合我的预期!

当我手动运行 SQL 并使用 PUTTY 假脱机时,它看起来是文件。为什么我的脚本会生成错误的脚本。我不知道为什么会这样。

非常感谢任何帮助!

编辑:输出:

100         Deva@Company@Sales          469
101         Deva@School                 234
102         Deva@Hospitals              245
103         Deva@Company@Finance        469

谢谢

【问题讨论】:

  • 其实在unix下发出cut -c命令,很明显布局不对。
  • 我自己试了一个例子!
  • 每行末尾或值之间的额外空格? set tab off 会影响您看到的内容吗?这可能会使某些对齐方式失效。如果行太长,您可能需要set trimspool on,但我不确定这是否相关?
  • @AlexPoole 欢呼...我能够识别出相同的...它对我有用!
  • @AlexPoole 你是对的!你们太棒了..我在这个问题上挣扎了很多..正在研究与 UNICODE 相关的问题!

标签: sql oracle unix sqlplus spool


【解决方案1】:

实际上,我可以轻松地重现您的问题。当列文本较小时会发生这种情况。当我发出确切的文本大小时,布局是大小,并且我看到假脱机文本中的文本有制表符而不是空格。模式也不一致。我刚刚研究了可用的命令,我发现了。 SET TAB OFF;在 sqlplus 中解决了这个问题。

我希望,sqlplus 本身正在将内部的多个空格更改为 TAB。设置TAB就解决了!

请尝试该选项。让我知道。祝你好运!

附注。编辑您的问题,揭示了错误,可能是这样,在格式化时有效地转换 TAB :)

【讨论】:

  • 你是对的!你们太棒了..我在这个问题上挣扎了很多..正在研究与 UNICODE 相关的问题!
  • @DevarajMahesan - SQL*Plus 文档有多个关于格式化的部分;包括set tab的行为。如果您已经知道要查找的内容,当然会有所帮助 *8-)
  • Devaraj - 不确定尾随空格是否也有问题,但如果是,您也应该SET TRIMSPOOL ON
【解决方案2】:

其实我有这种sqlplus的问题。在我修复它之后,我想建议你尝试使用这种格式的 sqlplus。

  1. 设置TRIMSPOOL ON;
  2. 设置选项卡关闭;

由于错误,因为它是关于假脱机问题。所以我们只是采用 trimspool 的格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多