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.
我有许多 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.