Procedure test:
create or replace PROCEDURE test(
num IN NUMBER,
res out SYS_REFCURSOR
)
AS
query varchar2(500);
BEGIN
query := 'SELECT 1,2 FROM dual';
OPEN res FOR query;
exception WHEN others then
DBMS_OUTPUT.PUT_LINE('ERROR '||SUBSTR(SQLERRM, 1 , 200));
end test;
It works, when calling from SQLDeveloper:
DECLARE
num NUMBER;
resCur SYS_REFCURSOR;
type r_individual is record (
A NUMBER,
B NUMBER
);
p_individual r_individual;
BEGIN
num := 1;
dbms_output.put_line('LANZA');
test(num, resCur);
loop
dbms_output.put_line('LOOP');
fetch resCur into p_individual;
exit when resCur%notfound;
dbms_output.put_line(p_individual.A);
dbms_output.put_line(p_individual.B);
end loop;
END;
The problem is when calling from Java:
CallableStatement sql = connection.prepareCall('{call test( ?, ?)}')
sql.setInt("num", 1)
sql.registerOutParameter("res", OracleTypes.CURSOR)
sql.execute()
ResultSet rs = (ResultSet) sql.getObject("resCur")
while (rs.next()) {
log.debug(rs.getInt(1))
}
rs.close()
I try to call a similar procedure with an out parameter type NUMBER, and it works. The problem seems to be when the out parameter is SYS_REFCURSOR.
Can you help me? Thanks a lot.