【问题标题】:Derby Column names get cut off when using ij使用 ij 时 Derby 列名被截断
【发布时间】:2014-07-05 07:39:55
【问题描述】:

当我输入“描述 [someTable];”时很长的列(超过 20 个字符)的列名被截断,并使用 & 符号。例如,我有两列似乎被命名为 WowThisIsAVeryLongC&。

当我运行 select * 语句时,列名也会被截断,因为其中的数据只有 2 或 3 个字符长。我尝试对表使用系统调用并选择将数据导出到 CSV,但这些并没有给我任何标题信息。 MaximumDisplayWidth 仅更改显示数据的宽度。我找不到任何方法来找出这些列的正确名称。这是我继承的数据库,所以有点卡住了。

我们将不胜感激。

【问题讨论】:

  • this 这样的东西会起作用吗?
  • 就是这样。谢谢约阿希姆。为了记录,表格也很大,无法从终端复制文本。我只是将所有表名和列名输出到文件中。工作得很好,再次感谢。我在下面粘贴修改后的 SQL 查询,希望它对将来的人有所帮助。
  • SYSCS_UTIL.SYSCS_EXPORT_QUERY ( IN 'SELECT TABLENAME,COLUMNNAME, t.* FROM sys.systables t, sys.syscolumns WHERE TABLEID = REFERENCEID','/opt/SomeFileName.txt',null,null,空)

标签: sql derby


【解决方案1】:

如果您使用的是 Derby Release 10.10+,那么您可以使用 databaseMetaData 工具。

这与您从describe '*' 命令获得的输出几乎相同:

ij> maximumdisplaywidth 1000;
ij> call syscs_util.syscs_register_tool( 'databaseMetaData', true );
Statement executed.
ij> select t.table_schem, t.table_name, c.column_name, c.type_name, c.DECIMAL_DIGITS, c.NUM_PREC_RADIX, c.COLUMN_SIZE, c.COLUMN_DEF, c.CHAR_OCTET_LENGTH, c.IS_NULLABLE 
from table( getTables( null, '%', '%' ) ) t, 
     table( getColumns( null, '%', '%', '%') ) c 
where c.table_schem = t.table_schem 
and c.table_name = t.table_name 
and t.table_type = 'TABLE' 
order by table_schem, table_name, column_name;

SQL 子句中使用的其他表和列属性可以从 java.sql.DatabaseMetaData 接口及其相应的方法名称和属性中获取(参考 Java API)。

(有关详细信息,请参阅“Derby 工具和实用程序指南”中的“使用 databaseMetaData 可选工具”)。

【讨论】:

    【解决方案2】:

    如果只是为了转储 select 语句的输出,知道数据值将完全显示最多 128 个字符(或在使用 MaximumDisplayWidth 命令设置值时更多),您可以强制列名称为通过人为地增加 SELECT 查询中输出的数据值的大小,长于其下方的数据值以完整显示。例如:

    ij> select TAG as longColumnNameForShortData, SERIAL as longColumnNameForSerial from ID;
    LO&|LONGCOLUMN&
    ---------------
    TM1|23594000
    TF1|0
    TS1|27188000
    

    然后用:

    ij> select CHAR(TAG,30) as longColumnNameForShortData, CHAR(SERIAL,30) as longColumnNameForSerial from ID;
    LONGCOLUMNNAMEFORSHORTDATA    |LONGCOLUMNNAMEFORSERIAL
    -------------------------------------------------------------
    TM1                           |23594000
    TF1                           |0
    TS1                           |27190000
    

    ...有点笨,但能胜任。

    【讨论】:

      【解决方案3】:

      尝试在 IJ 中使用帮助命令。这应该指向您 MaximumDisplayWidth Command还有ij.maximumDisplayWidth property

      【讨论】:

      • 这会设置数据的列宽,但不会增加超过 10 的列名字段
      • 定义一个最大值,而不是最小值,因此对短数据值以上的列名截断没有影响。
      猜你喜欢
      • 2012-12-30
      • 2012-08-19
      • 2019-05-20
      • 2021-11-27
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多