DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002 解决方法

QLCODE)的可能原因是:

*  程序包未绑定或已删除。

*  如果试图运行 DB2 实用程序或 CLI 应用程序,那么 DB2 实用程序可能需要

   重新绑定至数据库。

*  "%.pkgname",如果设置了 CURRENT PACKAGE PATH,但是在 CURRENT PACKAGE

   PATH 中的任何模式中都找不到名称为"pkgname"的程序包。


注意,当对给定的 package-schema.package-name 版本标识使用版本标识时,可

能有以相同的程序包模式和程序包名定义的程序包,但是未找到正确的程序包,

原因是现有程序包与请求的版本或一致性标记不一致。程序包必须与程序包名的

所有三个部分相匹配。当正在使用多个版本,导致出现此消息的附加原因为:

*  正在执行的应用程序的版本已预编译、编译和链接,但是未绑定,或已绑定但

   是后来删除了该版本的程序包。

*  应用程序已预编译和绑定,但是未编译和/或链接,所以正在执行的应用程序

   不是最新的。

*  程序包由与生成编译并链接至应用程序可执行文件的已修改源文件的预编译不

   同的源文件预编译生成的绑定文件绑定。

*  新应用程序同与现有的程序包相同的名称(和版本)绑定,这样就替换了现有

   的程序包。如果运行与替换的程序包相关联的应用程序,那么将导致此错误。


在所有这些情况下,请求的一致性标记与现有版本的一致性标记不匹配,因此认

为未找到程序包。


不能处理该语句。


用户响应:


指定正确的程序包名或绑定该程序。如果正在运行的应用程序未与数据库绑定,

请与数据库管理员联系以执行必需的绑定。确保正在执行的应用程序或对象模块

是与生成程序包的预编译和绑定相关联的已编译和链接的修改源代码。


如果设置了 CURRENT PACKAGE PATH,那么确保在 CURRENT PACKAGE PATH 中指定

了包括程序包的模式。


可以使用下列 SQL 语句来查询目录以确定是否有程序包的不同版本:


SELECT PKGSCHEMA, PKGNAME, PKGVERSION, UNIQUE_ID

FROM SYSCAT.PACKAGES

WHERE PKGSCHEMA='pkgschema' and PKGNAME='pkgname'.


注意 UNIQUE_ID 列与一致性标记相对应。


如果 DB2 实用程序需要重新绑定至数据库,那么当连接至数据库时,数据库管理

员可以通过从实例的 bnd 子目录发出下列 CLP 命令之一来完成此操作: 

*  对于 DB2 实用程序,发出"DB2 bind @db2ubind.lst blocking all grant

   public"。

*  对于 CLI,发出"DB2 bind @db2cli.lst blocking all grant public"。


联合系统用户:确保在适用的数据源上绑定联合服务器所必需的程序包。请参阅

《联合系统指南》,以了解有关将程序包绑定至数据源的更多信息。


  sqlcode:  -805


  sqlstate:  51002





DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002 解决方法


操作大量数据时如果发生这种错误,说明不是db2 使用的 package没有绑定,而是因为资源未释放,导致可以使用此package的资源不足,致使不能连接资源,这种情况有两种解决方法.


方法一:治标不治本,重新绑定package,然后为package的使用分配更多的资源


方 法二:标本兼治,在程序中,对PreparedStatement ,Statement,CallableStatement,ResultSet,Connection这些对象使用完毕后一定要调用close()方法 进行资源的释放,若不进行释放,在操作大量数据的时候,会出现一些问题,DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002 错误就是其中的一种.这种错误只要在代码中将使用完毕的PreparedStatement ,Statement,CallableStatement,ResultSet,Connection对象全部关闭即可[即调用close()方法即 可],关闭顺序最好是:1>ResultSet   2>PreparedStatement ,Statement,CallableStatement 3>Connection


你可能感兴趣的:(db2)