sunfull 发表于 2016-11-16 09:38:13

DB2 SQL error: SQLCODE: -517问题 原因排查和解决方法

  SQLCODE -517报错:
  com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -517, SQLSTATE: 07005, SQLERRMC: SQL_CURSH200C1
at com.ibm.db2.jcc.c.fg.e(fg.java:1596)
at com.ibm.db2.jcc.c.fg.a(fg.java:1225)
at com.ibm.db2.jcc.b.gb.n(gb.java:718)
at com.ibm.db2.jcc.b.gb.i(gb.java:255)
at com.ibm.db2.jcc.b.gb.c(gb.java:53)
at com.ibm.db2.jcc.b.w.c(w.java:46)
at com.ibm.db2.jcc.b.vb.h(vb.java:151)
at com.ibm.db2.jcc.c.fg.p(fg.java:1220)
at com.ibm.db2.jcc.c.gg.d(gg.java:2316)
at com.ibm.db2.jcc.c.gg.W(gg.java:457)
at com.ibm.db2.jcc.c.gg.executeUpdate(gg.java:440)
  IBM官方说明:
  SQL0517N  The cursor "<name>" identifies a prepared statement that is
      not a SELECT or VALUES statement.
  Explanation:
  The cursor "<name>" could not be used as specified because the prepared
statement named in the cursor declaration was not a SELECT or VALUES
statement.
  The statement cannot be processed.
  User response:
  Verify that the statement name is specified correctly in the PREPARE and
the DECLARE CURSOR for cursor "<name>" statements. Or correct the
program to ensure that only prepared SELECT or VALUES statements are
used in association with cursor declarations.
  sqlcode: -517
  sqlstate: 07005
SQL0517N
游标 名称 标识一个并非 SELECT 或 VALUES 语句的预编译语句。
说明
因为游标声明中指定的预编译语句不是 SELECT 或 VALUES 语句,所以游标 名称 未能像指定的那样使用。
无法处理该语句。

用户响应
验证是否在 PREPARE 和 DECLARE CURSOR 中为游标 名称 语句正确指定了语句名。或者更正程序,以确保仅将预编译的 SELECT 或 VALUES 语句与游标声明配合使用。
sqlcode:-517
sqlstate:07005
 
即未预编译的语句,无法关联游标,所以执行失败。


  排查方法:
  1、检查访问数据库是否使用的是PreparedStatement
  2、检查是否设置了对象的类型和数据库表字段的类型一致
  3、检查JDBC连接的url
  XXXdb.connection.url=jdbc:db2://192.168.1.1:50000/xxxDB:deferPrepares=false;currentSchema=XXX
  是否包括deferPrepares=false
  解决方案:
  1、PreparedStatement改为Statement
  2、保持类型一致
  3、JDBC连接设置为deferPrepares=false
页: [1]
查看完整版本: DB2 SQL error: SQLCODE: -517问题 原因排查和解决方法