Обсуждение: problem with returning a table
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);
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