Recusrive Functions in 7.0.3 - Mailing list pgsql-sql

From mark proctor
Subject Recusrive Functions in 7.0.3
Date
Msg-id 01021008430408.05071@localhost.localdomain
Whole thread Raw
In response to Re: Recusrive Functions in 7.0.3  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-sql
If I remove the line calling PERFORM it works without problems moving the children node for the passed integer into
testand then exiting.
 
I can then repeat the process going through the output to test iteratively and do not have any problems.
However if I put the PERFORM line back in to create a recursive function it just goes on forever, and I only have 6
nodes.

CREATE FUNCTION get_children (integer) RETURNS integer AS
'   DECLARE       pnode_parent ALIAS FOR $1;       rec RECORD;   BEGIN       FOR rec IN SELECT * FROM
tree_adjacency_matrixWHERE node_parent = pnode_parent LOOP               INSERT INTO test (node1, node2)
VALUES(rec.node_child,rec.node_parent);               PERFORM get_children(rec.node_child);       END LOOP;
RETURN0;   END;
 
'LANGUAGE 'plpgsql'  

Mark


On Saturday 10 February 2001 03:29, Tom Lane wrote:
> <plpgsql@polar-digital.com> writes:
> > Are recursive functions allowed in in 7.0.3
>
> Sure.
>
> play=> create function myfactorial(int) returns int as '
> play'> begin
> play'>   if $1 > 1 then
> play'>     return $1 * myfactorial($1 - 1);
> play'>   end if;
> play'>   return $1;
> play'> end;' language 'plpgsql';
> CREATE
> play=> select myfactorial(1);
>  myfactorial
> -------------
>            1
> (1 row)
>
> play=> select myfactorial(10);
>  myfactorial
> -------------
>      3628800
> (1 row)
>
> play=>
>
> I get a stack overflow crash at about myfactorial(7500), but that seems
> like a sufficient level of recursion depth for normal purposes ...
>
> > as I seem to be unable to
> > get them to work in plpgsql,
>
> Are you sure you aren't asking for infinite recursion, eg by invoking
> the same function with the same argument?
>
>             regards, tom lane


pgsql-sql by date:

Previous
From: mark proctor
Date:
Subject: Re: Recusrive Functions in 7.0.3
Next
From: mark proctor
Date:
Subject: Re: What's wrong with this function