Re: plpgsql recursion

From: Stephan Szabo <sszabo(at)megazone23(dot)bigpanda(dot)com>
To: Kluge <kluge(at)despammed(dot)com>
Cc: <pgsql-sql(at)postgresql(dot)org>
Subject: Re: plpgsql recursion
Date: 2003-05-20 17:47:06
Message-ID: 20030520104342.L69760-100000@megazone23.bigpanda.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

On Tue, 20 May 2003, Kluge wrote:

> Greetings!
> I have a table like:
>
> node parent
> 1 2
> 2 3
> 3 4
>
> Since i traverse this table with a recursive function, i want to avoid
> infinite recursion loop. I have wrote a function to check that a new record
> does not create a circular dependency. The function i wrote is as follow:
>
> CREATE OR REPLACE FUNCTION dba_test(INTEGER,INTEGER) RETURNS TEXT AS '
> DECLARE
> traversing ALIAS FOR $1;
> testing ALIAS FOR $2;
> t_rec RECORD;
> BEGIN
> FOR t_rec IN SELECT node,parent FROM dba_test WHERE parent = traversing
> LOOP
> IF t_rec.node = testing THEN
> RETURN ''Circular'';
> ELSE
> PERFORM dba_test(t_rec.node,testing);

Here you're calling dba_test recursively and ignoring its result and going
on. I don't think that'll do what you want. If parent is unique, I think
you can just RETURN dba_test(t_rec.node, testing). If it's not, you'll
have to do some additional work to return the correct result.

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Stephan Szabo 2003-05-20 17:49:42 Re: how to do this query?
Previous Message Jan Bodey 2003-05-20 17:39:50 Re: Date comparison question