Вход | Регистрация

Информационные технологии ::

Метки:

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

Я
   valich
 
23.12.03 - 08:23
Такая вот проблема, может кто подскажет.
Есть табличка - иерархический справочник, не в 1С. Организован он был в виде связанного списка. Т. е. три столбца: код, наименование, указатель на родителя. Код - обычный счетчик, простая сквозная нумерация. А проблема следующая, надо "научить" переносить группы от одного родителя к другому с проверкой. Т. е. надо проверить, а не хочет ли пользователь перенести группу к одному из своих далеких потомков.
Да, уровни вложенности в справочнике никак не ограничены. И хотелось бы организовать это все средствами сервера, так как практически вся бизнес-логика строится именно там.
 
  Рекламное место пустует
   valich
 
1 - 23.12.03 - 13:11
Вот блин, глюк ходячий!!! Рекурсия то нисходящая... Выход надо ставить по за циклу.
Как говорится, нельзя недооценивать предсказуемость тупизны :-))
Дошло, вот исходник на 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

Если кому интересно, могу прокомментировать ;)


Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует