首页 > 解决方案 > SQLPlus 报告中的列显示时间超过数据库列大小

问题描述

我有许多以前可以正常工作的 sql 报告。然而,最近它们开始输出,列宽比应有的长。根据Oracle的文档,如果sql报告中的列在报告COLUMN的开头没有明确的“”定义,例如' column example_col heading "Eg col" format A50',它应该以与数据库表中列的定义相同的宽度显示,即如果列被定义为varchar2(10)它应该以 10 个字符的宽度显示。

以前这很好,但是最近这些列中的一些已经开始以更大的宽度显示,这导致报告的行超出 linesize 延伸到第二行,从而使报告的可读性降低。

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

在问题开始之前报告

问题开始后报告

标签: sqloraclesqlplus

解决方案


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

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

症状 在不同的 SQL*Plus 会话中运行相同的语句会导致输出长度不同。

第 1 节:

SQL> select sysdate, sysdate from dual; SYSDATE SYSDATE


30-OCT-08 30-OCT-08

第 2 节:

SQL> select sysdate, sysdate from dual; SYSDATE SYSDATE


30-OCT-08 30-OCT-08

原因 NLS_LANG 字符集决定了输出的显示方式。

使用多字节字符集时,列宽会更大。解决方案 为 NLS_LANG 设置字符集以获得想要的输出。如果您需要“长”输出,请使用 UTF8 作为字符集。确保客户端操作系统可以处理选择的字符集。


推荐阅读