From: | "Pavel Stehule" <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | "Gauthier, Dave" <dave(dot)gauthier(at)intel(dot)com> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: pl-pgsql, recursion and cursor contexting |
Date: | 2008-09-29 14:27:35 |
Message-ID: | 162867790809290727p28beccd3m9843654fc025ed67@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hello
every call of plpgsql function has own result, there are not any
shared result, so you need forward result from deeper call to up.
http://www.pgsql.cz/index.php/PL/pgSQL_(en)#Recursive_call_of_SRF_functions
regards
Pavel Stehule
2008/9/29 Gauthier, Dave <dave(dot)gauthier(at)intel(dot)com>:
> Hi:
>
>
>
> I'm in the business of writting recursive PL-Pgsql functions. I need to
> know what happens to the data stream from a select cursor inside of which
> the recursive call is made. For example....
>
>
>
>
>
>
>
> create table int_stream (num integer);
>
> insert into int_stream (num) values (1);
>
> insert into int_stream (num) values (2);
>
> insert into int_stream (num) values (3);
>
> insert into int_stream (num) values (4);
>
> insert into int_stream (num) values (5);
>
>
>
> create or replace function my_factorial(integer) returns insteger as $$
>
>
>
> in_int alias for $1;
>
> x integer;
>
> rec record;
>
>
>
> begin
>
>
>
> if(in_int = 1) then
>
> return(1);
>
> end if;
>
>
>
> for rec in select num from int_stream where num <= in_int
>
> loop
>
> x := in_int * my_factorial(in_int - 1);
>
> end loop;
>
>
>
> return(x);
>
> end;
>
> $$ language plpgsql;
>
>
>
> This comes up witht he right answer. IOW, making the recursive call from
> within the "for rec in..." loop doesn't seem to destroy the data streams
> from earlier calls. I just need to make sure that this will always be the
> case and that getting the correct result in this example is not just an
> artifact of it's simplicity. I know, for example, this was a no-no in
> Oracle. You had to stuff arrays with the resuts from looping in cursors,
> and then make the recursive call in a subsaquent loop on the arrays.
>
>
>
> Thanks
>
> -dave
>
>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Gauthier, Dave | 2008-09-29 14:52:47 | Re: pl-pgsql, recursion and cursor contexting |
Previous Message | Tom Lane | 2008-09-29 14:27:30 | Re: pl-pgsql, recursion and cursor contexting |