【问题标题】:Column or global variable not found未找到列或全局变量
【发布时间】:2018-01-03 23:18:06
【问题描述】:

问题是在我们的 IBM DB2 数据库中查询使用 Aqua Data Studio 创建的表时,除非我使用系统名称,否则无法指定列名。不久前制作的表格没有这个问题。查询可以在其中找到列名。使用通配符也没有问题,并且列名显示得很好。 为清楚起见:

  • 这可行:SELECT * FROM WUNITS.DVIRS
  • 这可行:从 WUNITS.DVIRS 中选择 ID___00001
  • 这不是:从 WUNITS.DVIRS 中选择 ID
  • 这确实适用于以相同方式创建的旧表:SELECT Id FROM WUNITS.DVIRS

这是列定义的屏幕截图

我做错了什么?

【问题讨论】:

  • 没有这个客户端(Aqua Data Studio)你能连接到数据库吗?通过linux控制台说?似乎该客户端正在创建别名以显示表结构而不是真实的表结构。尝试在其上运行:describe table WUNITS.DVIRS 并使用结果编辑您的问题
  • 从 mytable 中选择“Id”。看起来小写已启用。

标签: sql db2 db2-400


【解决方案1】:

由于您提到系统名称,我假设您使用的是 Db2 for IBM i....

我怀疑您创建的表带有带引号的列名...否则您不会看到大小写混合的列名,它们都是大写字母。

例如:

create table dtcwilt.dvirs (
  "Id" bigint
  , "AssetNumber" varchar(25)
  , WoNumber bigint
  , WoStatusId int
)

不确定您使用什么工具来显示列,但 ACS 架构工具会显示带引号的名称。

引号实际上是名称的一部分,您需要在选择中使用带引号的名称,正确大写

这应该可行:

SELECT "Id" FROM WUNITS.DVIRS

这不会:

SELECT "ID" FROM WUNITS.DVIRS

【讨论】:

  • 就是这样!我在微软世界度过了太多时间。现在我只需要修复六张桌子。
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
  • 2017-11-29
  • 1970-01-01
  • 2017-11-08
  • 2015-03-07
  • 1970-01-01
相关资源
最近更新 更多