[prev in list] [next in list] [prev in thread] [next in thread]
List: postgresql-sql
Subject: Re: [SQL] plpgsql recursion
From: Rod Taylor <rbt () rbt ! ca>
Date: 2003-05-23 1:59:43
[Download RAW message or body]
> IF t_rec.node = testing THEN
> RETURN ''Circular'';
> ELSE
> PERFORM dba_test(t_rec.node,testing);
> END IF;
> I would use this function BEFORE inserting the new row. But if i try SELECT
> dba_test(4,1); i don't have the result i expect. Can i you give me an hint
> where am i wrong?
It's probably working as it's written :) Once it finds 'Curcular' and
returns it to the recursed call of dba_test, you immediately throw away
the return value.
PERFORM should probably be replaced with:
ELSE
-- ret is a variable
SELECT dba_test(t_rec.node, testing) INTO ret;
IF ret = ''Circular'' THEN
RETURN ret;
END IF;
END IF;
More to the point, if you're attempting to prevent circular items, and
this function will be used in the form of a trigger, then simply RAISE
EXCEPTION. This way you can ignore having to deal with returned values.
--
Rod Taylor <rbt@rbt.ca>
PGP Key: http://www.rbt.ca/rbtpub.asc
["signature.asc" (application/pgp-signature)]
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic