次のコードを実行しています。
CallableStatement cs;
cs = conn.prepareCall("{ ? = call mypackage.myfunc()}");
cs.registerOutParameter(1, OracleTypes.CURSOR);
System.out.println(cs.execute());
System.out.println(cs.getResultSet());
ResultSet rs = (ResultSet) cs.getObject(1);
System.out.println(rs);
関数は次のように宣言されます。
CREATE OR REPLACE PACKAGE BODY myuser.mypackage AS
FUNCTION myfunc
return sys_refcursor
is
a_cursor sys_refcursor;
begin
open a_cursor for select * from mytable;
return a_cursor;
end myfunc;
end mypackage;
/
ドキュメントによると、結果がある場合、cs.execute() は true を返し、cs.getResultSet() は値を持ちます。ただし、これは私が得る出力です:
false
null
oracle.jdbc.driver.OracleResultSetImpl@b92a848
Oracle Express 11.2.0 と最新のドライバーを使用しています。
ヒント/説明/試してみることは大歓迎です。
ありがとう!