sql - IBM Db2 网络驱动程序 SQL 错误。找不到表名?

标签 sql db2

从这个查询:

select * from table

我收到以下错误消息:
Error: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=webuser.table, DRIVER=4.8.87
SQLState:  42704
ErrorCode: -204
Error: DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-204;42704;webuser.table, DRIVER=4.8.87
SQLState:  56098
ErrorCode: -727

非常感谢有关如何调查问题的任何建议。

最佳答案

乍一看,DB2 似乎没有在 webuser 下找到那个表名。架构,或当前连接用户的架构与表的架构不匹配。尝试:

select * from webuser.table

如果失败,那么它可能在 webuser 下不存在。架构,因此请尝试找出它确实存在于哪个架构下。

您经常可以找到 sql error codes 的信息在 IBM DB2 infocenter或在 DB2 UDB 命令行上,如下所示:
db2 ? SQL0100

您可以通过以下方式查找任何错误:
db2 ? SQLnnnnn 

在哪里 nnnnn是错误代码。

您还可以通过在 google 上搜索而不包括 - 来经常从 db2 中找到有关 sql 错误代码的信息。因为谷歌从搜索结果中删除了前面带有破折号的术语。所以,搜索 sql code 204 而不是 sql code -204 .

您通常可以在 sysibm.tables 下找到所有表格的列表。或 syscat.tables取决于您运行的系统类型(z/OS 或 UDB),还取决于 db2 管理员是否限制了对这些目录表的访问。

如果您针对 UDB 实例运行,请尝试:
select tabschema, tabname from syscat.tables

我当然假设您不希望该表被命名为 table .我认为这是 db2 或 SQL-92 标准下的限制词。

如果您碰巧正在运行运行该查询的存储过程,那么您可能不会从查询中看到真正的错误。存储过程通常返回与存储过程中的查询不同的错误代码,除非它们被编程为从查询本身捕获并返回 sqlcode 和 sqlstate。

此外,我看到您获得的 sqlcode 为 -727,消息代码为 2。该文档说:
An error occurred during implicit system action type action-type . Information returned for the error includes SQLCODE sqlcode , SQLSTATE sqlstate and message tokens token-list . 

其中 action-type 为 2:隐式准备缓存的动态 SQL 语句

对于数据库管理员,此错误信息不太直接,但更适合。它可能最终会很有用,但我会先尝试其他建议。这可能意味着某些包未绑定(bind)到数据库(如您的网络驱动程序的包)或数据库中的某些权限不正确或未正确应用修订包并且缺少数据库过程。但是,它也可能是由 -204 引起的,只是后续错误。

关于sql - IBM Db2 网络驱动程序 SQL 错误。找不到表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7183433/

相关文章:

php - MYSQL/PHP : Query with multiple joins

mysql - 连接 4 个表导致空结果

java - 更新 DB2 for iSeries 表时出现错误 SQL7008

db2 - 用于测试的 LUW DB2 在 IBM 生产大型机上使用 DB2

db2 - 连接到 DB2 数据库 :[unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed

mysql - 从 MySQL 触发器中准备好的查询中获取结果?

c# - 在 SQL Server 2008 中的多个表中插入数据

SQL 从选择中获取唯一值

java - 动态获取结果集列和值

grails - 如何让 Grails 将我的 String 字段映射到 Clob?