Re: plpgsql recursion
От | Rod Taylor |
---|---|
Тема | Re: plpgsql recursion |
Дата | |
Msg-id | 1053655182.279.28.camel@jester обсуждение исходный текст |
Ответ на | plpgsql recursion ("Stefano Vita Finzi" <stefano.vita@pronesis.it>) |
Список | pgsql-sql |
> 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
В списке pgsql-sql по дате отправления: