来自此查询:select*from table
我收到以下错误消息:
错误:DB2 SQL错误:SQLCODE = -204,SQLSTATE = 42704,SQLERRMC = webuser.table,DRIVER = 4.8.87 SQLState:42704 ErrorCode:-204错误:DB2 SQL错误:SQLCODE = -727,SQLSTATE = 56098,SQLERRMC = 2; -204; 42704; webuser.table,DRIVER = 4.8.87 SQLState:56098 ErrorCode:-727
任何关于如何调查问题的建议都非常感谢.
乍一看,似乎DB2没有在webuser架构下找到该表名,或者当前连接用户的架构与该表的架构不匹配.尝试:
select * from webuser.table
Run Code Online (Sandbox Code Playgroud)
如果失败,那么它可能在webuser模式下不存在,因此尝试找出它存在的模式.
您经常可以在IBM DB2信息中心或DB2 UDB命令行中找到有关sql错误代码的信息,如下所示:
db2 ? SQL0100
Run Code Online (Sandbox Code Playgroud)
您可以通过这种方式查找任何错误:
db2 ? SQLnnnnn
Run Code Online (Sandbox Code Playgroud)
哪里nnnnn是错误代码.
你也可以经常在谷歌上搜索来自db2的sql错误代码的信息而不包括-谷歌从搜索结果中删除前面的短划线.所以,搜索 sql code 204 而不是 sql code -204 .
您通常可以根据sysibm.tables或运行syscat.tables的系统类型(z/OS或UDB)查找所有表的列表,还取决于db2管理员是否具有对这些目录表的访问权限.
如果您针对UDB实例运行,请尝试:
select tabschema, tabname from syscat.tables
Run Code Online (Sandbox Code Playgroud)
我当然假设您不希望该表被命名table.我认为这是db2或SQL-92标准下的限制词.
如果您正在运行运行该查询的存储过程,那么您可能无法从查询中看到真正的错误.存储过程通常返回与存储过程内的查询不同的错误代码,除非它们被编程为从查询本身捕获并返回sqlcode和sqlstate.
另外,我看到你得到一个-727的sqlcode,消息代码为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 .
Run Code Online (Sandbox Code Playgroud)
action-type为2的地方:隐式准备缓存的动态SQL语句
对于数据库管理员而言,此错误信息不那么简单并且更加优化.它可能最终有用,但我会首先尝试其他建议.这可能意味着某些软件包未绑定到数据库(如网络驱动程序的软件包)或数据库中的某些权限不正确或修订包未正确应用且缺少数据库过程.但是,它也可能是由-204引起的,只是后续的错误.