2

データベースの Oracle バージョンは 10g です。

ストアド プロシージャは、テーブル内のすべての要素を選択し、次のように REF CURSOR 型を返します。 create または replace

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 に答える