Re: return next in recursive function - Mailing list pgsql-general

From Stephan Szabo
Subject Re: return next in recursive function
Date
Msg-id 20031002080057.R62929@megazone.bigpanda.com
Whole thread Raw
In response to return next in recursive function  (Petr Bravenec <pbravenec@solartec.cz>)
Responses Re: return next in recursive function  (Petr Bravenec <pbravenec@solartec.cz>)
List pgsql-general
On Thu, 2 Oct 2003, Petr Bravenec wrote:

>
> I have found that when I use the RETURN NEXT command in recursive function,
> not all records are returned. The only records I can obtain from function
> are records from the highest level of recursion. Does exist some
> work-around?

> create or replace function foo (integer)
>           returns setof foo as '
>     declare pid     alias for $1;
>     declare rec     RECORD;
>     BEGIN
>     FOR rec in select * from foo
>                where foo.pid=pid LOOP
>             return next rec;
>             raise warning ''uid=% pid=%'',rec.uid,rec.pid;
>             select into rec * from foo (rec.uid);

Shouldn't you be looping over these results in order to return them,
something like
 FOR rec2 in select * from foo(rec.uid) LOOP
  return next rec2;
 END LOOP;

Otherwise, why should the results from the other call become results from
your call (what if you want to process them and not return all of them, or
what if it's a function with a different type?)

>     END LOOP;
>     return null;
>     end;
> ' language 'plpgsql';

pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: BLOBs, pg_dump & pg_restore
Next
From: Tom Lane
Date:
Subject: Re: return next in recursive function