【问题标题】:IBM Db2 net driver SQL error. Not finding table name?IBM Db2 网络驱动程序 SQL 错误。找不到表名?
【发布时间】:2011-08-24 23:17:23
【问题描述】:

来自这个查询:

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

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

【问题讨论】:

    标签: sql db2


    【解决方案1】:

    乍一看,DB2 似乎没有在webuser 模式下找到该表名,或者当前连接用户的模式与该表的模式不匹配。试试:

    select * from webuser.table
    

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

    您通常可以在IBM DB2 infocenter 或 DB2 UDB 命令行中找到sql error codes 的信息,如下所示:

    db2 ? SQL0100
    

    您可以通过这种方式查找任何错误:

    db2 ? SQLnnnnn 
    

    nnnnn 是错误代码。

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

    您通常可以在sysibm.tablessyscat.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 语句的隐式准备

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

    【讨论】:

      【解决方案2】:

      SQLCODE=-727, SQLSTATE=56098 可能会发生在 select 语句中的一个列名中有错字。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多