【问题标题】:Cannot perform fetch on a PLSQL statement: next无法对 PLSQL 语句执行提取:下一个
【发布时间】:2013-10-26 21:59:54
【问题描述】:

存储过程

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);
  }

在执行上述程序时出现错误。

厄洛尔:

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)

【问题讨论】:

    标签: java stored-procedures jdbc


    【解决方案1】:

    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);
    

    【讨论】:

      猜你喜欢
      • 2015-06-14
      • 2021-08-06
      • 2017-08-04
      • 1970-01-01
      • 2012-02-10
      • 2019-11-28
      • 2013-06-28
      • 2016-03-28
      • 2014-01-01
      相关资源
      最近更新 更多