无法在PLSQL语句上执行提取:下一个

来源:爱站网时间:2021-09-24编辑:网友分享
Storeproceduere创建或替换过程添加项(A入,B入,C出入),开始于C:= A + B; dbms_output.put_line(c);结束添加; JDBC程序cstmt = ...

问题描述


Storeproceduere

CREATE OR REPLACE
PROCEDURE ADDITION
  (
    A IN NUMBER ,
    B IN NUMBER ,
    C OUT NUMBER )
AS
BEGIN
  C := A+B;
  dbms_output.put_line(c);
END ADDITION;

JDBC程序

 cstmt = conn.prepareCall("BEGIN addition(?, ?,?); END;");
  cstmt.setInt(1, 10);
  cstmt.setInt(2, 85);
  cstmt.registerOutParameter(3, java.sql.Types.INTEGER);
  ResultSet rs = cstmt.executeQuery();
  while(rs.next()){
  int c =rs.getInt("c");
    System.out.println(c);
  }

在执行上述程序时出错。

Eroor:

java.sql.SQLException: Cannot perform fetch on a PLSQL statement: next
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147)
    at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:192)
    at stored_procedure.main(stored_procedure.java:32)

解决方法:


executeQuery()设计为与返回游标的sql语句一起使用(最常见的是SELECT查询)。您的调用不会返回游标,因此不适合与此方法一起使用。您应该只使用execute(),然后从输出参数中获取值:

cstmt = conn.prepareCall("BEGIN addition(?, ?,?); END;");
cstmt.setInt(1, 10);
cstmt.setInt(2, 85);
cstmt.registerOutParameter(3, java.sql.Types.INTEGER);
cstmt.execute();
int c = cstmt.getInt(3);
System.out.println(c);

上一篇:无法从静态上下文错误中引用

下一篇:Domino java xpage-服务器范围内的缓存值

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载