Re: return next in recursive function

Поиск
Список
Период
Сортировка
От Stephan Szabo
Тема Re: return next in recursive function
Дата
Msg-id 20031002225211.V85561@megazone.bigpanda.com
обсуждение исходный текст
Ответ на Re: return next in recursive function  (Petr Bravenec <pbravenec@solartec.cz>)
Список pgsql-general
On Fri, 3 Oct 2003, Petr Bravenec wrote:

> Stephan Szabo napsal(a):
>
> >>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?)
>
> Yes, I understand but I expect that the Postgres will try to do what I
> wrote.

AFAICS it is doing exactly what you wrote. It's giving you a row in rec
from the resultset of the recursive call which you do nothing with and
then overwrite back at the top of the loop.

It's not determining it's called recursively or anything of the sort, each
function call has its own result set, there's no implicit union or any
such going on.  That'd be doing something other than what you wrote.


В списке pgsql-general по дате отправления:

Предыдущее
От: Dennis Gearon
Дата:
Сообщение: anyone give me some good liniks to ...
Следующее
От: Alex
Дата:
Сообщение: pg_restore takes ages