Recusrive Functions in 7.0.3
От | mark proctor |
---|---|
Тема | Recusrive Functions in 7.0.3 |
Дата | |
Msg-id | 01021008430408.05071@localhost.localdomain обсуждение исходный текст |
Ответ на | Re: Recusrive Functions in 7.0.3 (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | 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 по дате отправления: