2

我们数据库的Oracle版本是10g。

存储过程选择表中的所有元素并返回一个 REF CURSOR 类型,如下所示:创建或替换

PROCEDURE S_S_TEST( 
  test_OUT OUT OAS_TYPES.REFCURSOR
) 
AS
BEGIN
  OPEN test_OUT FOR      
      SELECT *
      FROM table_p;
   CLOSE test_OUT;
END S_S_TEST;

在 JAVA 中执行此存储过程时,会获得以下异常 -

java.sql.SQLException: Cursor is closed. at oracle.jdbc.driver.T4CResultSetAccessor.getCursor(T4CResultSetAccessor.java:323) at oracle.jdbc.driver.ResultSetAccessor.getObject(ResultSetAccessor.java:85) at oracle.jdbc.driver.OracleCallableStatement.getObject(OracleCallableStatement.java:1401) at com.ibm.ws.rsadapter.jdbc.WSJdbcCallableStatement.getObject(WSJdbcCallableStatement.java:443)

我试图了解错误是什么以及如何修复它。有人可以帮我吗?

谢谢!

4

1 回答 1

4

调用存储过程的客户端负责关闭游标。请删除代码:CLOSE test_OUT;

客户端关闭它。在这种情况下,客户端是调用存储过程的 JDBC 程序。

于 2009-08-06T21:30:44.020 回答