SQLPlus 报告中的列显示比数据库列大小长

Columns in SQLPlus report display longer than database column size

我有许多 sql 报告过去都运行良好。然而,最近它们开始输出时列宽比应有的长。根据 Oracle 的文档,如果 sql 报告中的列在报告的开头没有明确的“COLUMN”定义,例如“column example_col heading "Eg col" format A50”,它应该显示宽度为与数据库中列的定义相同 table,即如果列定义为 varchar2(10),它应该以 10 个字符的宽度显示。

以前这没问题,但最近这些列中的一些列开始以更大的宽度显示,这导致报告的行超出行大小延伸到第二行,从而降低了报告的可读性。

我只是想看看是否有人以前遇到过这种行为并且可能知道可能是什么原因?以下是其中一份报告前后的图片,以便您可以看到问题。

report before problems started

report after problems started

COLUMN在我看来是这样。

  • 看起来像问题开始前的报告使用了列格式以便输出看起来不错
  • 看起来像问题开始后的报告不再使用列格式

问题是:“之前”和“之后”发生了什么变化?几种可能性:

  • COLUMN 格式行已删除
  • 使用了
  • CLEAR COLUMNS,因此所有列设置都丢失了
  • 检查
    • .SQL 个用于创建报告的文件
    • login.sql
    • glogin.sql

原来问题出在将 NLS_LANG 环境变量设置为 AMERICAN_AMERICA.AL32UTF8。这会导致列宽在 SQLPlus 中输出时被扩展。解决方案是将此环境变量更改为 AMERICAN_AMERICA.WE8ISO8859P1.

来自相关Oracle Metalink的详细信息如下:

Symptoms Running the same statement in different SQL*Plus sessions results in different length off the output.

Session 1:

SQL> select sysdate, sysdate from dual; SYSDATE SYSDATE


30-OCT-08 30-OCT-08

Session 2:

SQL> select sysdate, sysdate from dual; SYSDATE SYSDATE


30-OCT-08 30-OCT-08

Cause The NLS_LANG character set determines how the output will be presented.

When using multibyte character sets column widths will be larger. Solution Set character set for NLS_LANG to get wanted output. If you need "long" output, use UTF8 as character set. Make sure the client OS can handle the character set chosen.