Thread: Problem with returning setof record

Problem with returning setof record

From
oliverp21@free.fr
Date:
Hello,

Here is a simple function I created for a test.

create function ttt() returns setof record as '
declare
r record;
begin
for r in select * from utilisateurs.menus loop  return next r;
end loop;
return;
end;
' language 'plpgsql';

When I try to use it, it returns to me :

select ttt();set-valued function called in context that cannot accept a set
:  PL/pgSQL function "ttt" line 5 at return next

Anyone has an idea ?

Best regards,
Patrice OLIVER


Re: Problem with returning setof record

From
Richard Huxton
Date:
oliverp21@free.fr wrote:
> Hello,
> 
> Here is a simple function I created for a test.
> 
> create function ttt() returns setof record as '

> When I try to use it, it returns to me :
> 
> select ttt();
>  set-valued function called in context that cannot accept a set
> :  PL/pgSQL function "ttt" line 5 at return next
> 
> Anyone has an idea ?

You need to treat it like a table:  SELECT * FROM ttt();
Also, I'm not sure you can return a setof anonymous record types (unless 
you can specify the structure in the select).
Try CREATE FUNCTION...RETURNS SETOF utilisateurs.menus

If there's no appropriate table you can use CREATE TYPE to create a 
structure.
--   Richard Huxton  Archonet Ltd