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 по дате отправления:

Предыдущее
От: Stephan Szabo
Дата:
Сообщение: Re: Referencing a column from another table in a different
Следующее
От: Bruce Young
Дата:
Сообщение: language "plpgsql" does not exist