无法对PLSQL语句执行访存:下一步
CREATE OR REPLACEPROCEDURE 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