无法对PLSQL语句执行访存:下一步

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;

 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)

回答:

executeQuery()设计用于与返回游标(通常是SELECT查询)的sql语句一起使用。您的调用不会返回游标,因此不适合与此方法一起使用。您应该只使用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);

以上是 无法对PLSQL语句执行访存:下一步 的全部内容, 来源链接: utcz.com/qa/406470.html

回到顶部