仓库程序
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()设计用于与返回游标(通常是SELECT查询)的sql语句一起使用。您的调用不会返回游标,因此不适合与此方法一起使用。您应该只使用execute(),然后从输出参数获取值:
executeQuery()
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);