Thread: problem with returning a table

problem with returning a table

From
Ejder DAŞKIN
Date:
Hi everybody,

There is a  function that returns a table.  I set out parameter's type
to  Types.OTHER but When I call the function in java, returning type is
returned as INTEGER .

Here is the function:

CREATE OR REPLACE FUNCTION sube_getir(int4, "varchar")
 RETURNS SETOF subeler AS
$BODY$
DECLARE
id ALIAS FOR $1;
ad ALIAS FOR $2;
ref record;

BEGIN
   IF (id=0)AND(ad='') THEN
       for ref in SELECT * FROM subeler loop
           RETURN NEXT ref;
       end loop;
       return;

   ELSEIF (ad='') THEN
       for ref in SELECT * FROM subeler WHERE "HESAP_SUBE_ID"=id loop
       return next ref;
        end loop;
        return;
   ELSE
        for ref in SELECT * FROM subeler WHERE "HESAP_SUBE_ADI"=ad loop
       return next ref;
        end loop;
        return;
   END IF;
  END;
$BODY$
 LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION sube_getir(int4, "varchar") OWNER TO postgres;

--------calling function in java:

sc = conn.prepareCall("{ ? = call sube_getir( ? , ? ) }");
           sc.registerOutParameter(1,Types.OTHER);
           sc.setInt(2,4);
           sc.setString(3,"");
           sc.execute();
           rs = (ResultSet)sc.getObject(1);

Re: problem with returning a table

From
Kris Jurka
Date:

On Mon, 28 Mar 2005, [ISO-8859-9] Ejder DA�KIN wrote:

> There is a  function that returns a table.  I set out parameter's type
> to  Types.OTHER but When I call the function in java, returning type is
> returned as INTEGER .
>
> CREATE OR REPLACE FUNCTION sube_getir(int4, "varchar")
>  RETURNS SETOF subeler AS
>
> sc = conn.prepareCall("{ ? = call sube_getir( ? , ? ) }");
>            sc.registerOutParameter(1,Types.OTHER);
>            sc.setInt(2,4);
>            sc.setString(3,"");
>            sc.execute();
>            rs = (ResultSet)sc.getObject(1);
>

http://jdbc.postgresql.org/documentation/80/callproc.html#callproc-resultset

As the documentation describes there are two methods for getting
ResultSets from a stored procedure.   You have mismatched the
calling convention with the function you have written.

Kris Jurka