0

Want JDBC to get multiple result-sets from PostgreSql 12 function. JDBC version org.postgresql/postgresql/42.2.9. The PostgreSql function is here:

create or replace function test()
returns setof refcursor as $$
declare
    ret1 refcursor;
    ret2 refcursor;
begin
    open ret1 for
    select 10 as a;
    return next ret1;
    open ret2 for
    select 20 as b;
    return next ret2;
end; $$ language plpgsql;

Java code is like this:

stmt = getConnection().prepareCall("{ ? = call test() }");
stmt.registerOutParameter(1, Types.OTHER);
stmt.execute();
rs = (ResultSet)stmt.getObject(1);
if (rs.next()) {
    int a = rs.getInt("a");
    if (rs.next()) {
        int b = rs.getInt("b");
    }
}

"a" is successfully retrieved, but the second "rs.next()" returns false. Googled a lot but couldn't make it work. How can I get the 2nd result-set?

0

1 Answer 1

1

This link helped me a lot and the problem was resolved.

    ...
    out ret1 refcursor,
    out ret2 refcursor)
returns record as $$
begin
    open ret1 for select 10;
    open ret2 for select 20;
end; $$ language plpgsql;

Java:

stmt = getConnection().prepareCall("{call test(?,?)}");
stmt.registerOutParameter(1, Types.OTHER);
stmt.registerOutParameter(2, Types.OTHER);
stmt.execute();
ResultSet rs1 = (ResultSet)stmt.getObject(1);
ResultSet rs2 = (ResultSet)stmt.getObject(2);
int a = 0, b = 0;
if (rs1.next()) {
    a = rs1.getInt(1);
}
if (rs2.next()) {
    b = rs2.getInt(1);
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.