【问题标题】:Columns in SQLPlus report display longer than database column sizeSQLPlus 报告中的列显示时间超过数据库列大小
【发布时间】:2021-06-06 21:09:06
【问题描述】:

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

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

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

report before problems started

report after problems started

【问题讨论】:

  • 您确定列宽没有改变吗?在 sqlplus 中,尝试对表执行 describe 命令:desc mytable
  • 我也想过这个,但看起来表格的定义没有改变。

标签: sql oracle sqlplus


【解决方案1】:

COLUMN 在我看来是这样。

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

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

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

【讨论】:

    【解决方案2】:

    原来问题在于将 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 作为字符集。确保客户端操作系统 可以处理选择的字符集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 2010-12-11
      • 2013-10-29
      • 2011-08-09
      相关资源
      最近更新 更多