> Если узел перемещается, то естественно уровень может меняться. В этом > случае в триггере на обновление узла вызываем обновление всех его > потомков в цикле, те в свою очередь сделают то же самое со своими > потомками и т.д. Таким образом обходим рекурсию.
Это тоже рекурсия. В триггере на update вызываем update, который тоже вызывает триггер, который в свою очередь... и т. д.... > Я тут уже замучился намекать на то, что условия задачи неполны. :) Условия задачи полны: сказать мне, как называется константа, которая ограничивает глубину рекурсивных вызовов процедур. ;)) Я замучаюсь объяснять всю задачу... Но, в частности, она сводится к поиску расстояний до всех потомков от некоторого произвольно заданного в момент запроса узла несбалансированного (местами сильные перекосы) бинарного дерева. На выходе запроса должна получаться таблица, в которой в соответствие каждому узлу ставится расстояние до заданного родительского узла. Дерево изменяется узлы могут переставляться, в том числе и те, которые близки к корню. > Вычисление пути при вставке/обновлении узла также элементарно: берём > префикс родителя, добавляем идентификатор вставляемого узла. И нужно обновить идентификаторы всех его потомков... > З.Ы. Эк меня зацепило. Это всё потому, что не люблю я рекурсию. Хотя > готовить её умею. :) Если бы писали на функциональных языках полюбили бы, многие задачи решаются с её помощью гораздо проще. Только нужен умный компилятор, который будет её раскручивать в цикл. ;) Я тоже не люблю рекурсию в FB, но на данный момент это простое и достаточно эффективное решение имеющейся проблемы. До этого напоролся на ограничение глубины рекурсии, переделал всё с помощью UDF год жили, но происходит утечка памяти в селективных процедурах. Сейчас это стало проблемой, в 2.1 её можно решить, но не хочется переписывать UDF. Кроме того, появился вкусный WITH RECURSIVE. Вот я и хочу снова попробовать рекурсию, только глубину надо увеличить. ;)

