Сделать обход иерархической структуры в SQL #636


#0 by valich
Такая вот проблема, может кто подскажет. Есть табличка - иерархический справочник, не в 1С. Организован он был в виде связанного списка. Т. е. три столбца: код, наименование, указатель на родителя. Код - обычный счетчик, простая сквозная нумерация. А проблема следующая, надо "научить" переносить группы от одного родителя к другому с проверкой. Т. е. надо проверить, а не хочет ли пользователь перенести группу к одному из своих далеких потомков. Да, уровни вложенности в справочнике никак не ограничены. И хотелось бы организовать это все средствами сервера, так как практически вся бизнес-логика строится именно там.
#1 by valich
Вот блин, глюк ходячий!!! Рекурсия то нисходящая... Выход надо ставить по за циклу. Как говорится, нельзя недооценивать предсказуемость тупизны :-)) Дошло, вот исходник на Interbase, если кому интересно. CREATE PROCEDURE FIND_RING_ON_TREE (    BEGIN_GROUP INTEGER,    NEW_PARENT INTEGER,    REZERV INTEGER) RETURNS (    RESULT INTEGER) AS DECLARE VARIABLE TEMP_GROUP INTEGER; BEGIN  RESULT = :REZERV;  FOR SELECT NGNUMBER FROM NGROUP      WHERE NGPARENT = :BEGIN_GROUP      INTO :TEMP_GROUP  DO    BEGIN      IF (:NEW_PARENT = :TEMP_GROUP) THEN        BEGIN          RESULT = :RESULT + 1;        END      IF (:RESULT = 0) THEN        BEGIN          EXECUTE PROCEDURE FIND_RING_ON_TREE(:TEMP_GROUP,:NEW_PARENT,:RESULT)                    RETURNING_VALUES :RESULT;        END    END  EXIT; END Если кому интересно, могу прокомментировать ;)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям