Деревья. Копирование ветки.

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
RESEt
Сообщения: 4
Зарегистрирован: 20 янв 2006, 12:15

Деревья. Копирование ветки.

Сообщение RESEt » 20 янв 2006, 12:19

Здравствуйте!
Научите, как скопировать ветку дерева...
Алгоритм или пример кода.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 20 янв 2006, 13:31

Это зависит от метода хранения твоего дерева и может быть как простой INSERT..SELECT так и рекурсивная SP.

RESEt
Сообщения: 4
Зарегистрирован: 20 янв 2006, 12:15

Сообщение RESEt » 20 янв 2006, 14:20

Хранится в простом виде: таблица с полями ID, ID_PARENT, NAME.
А копировать нужно всю ветку с её детьми.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 20 янв 2006, 15:06

мдя. в общем, нужна рекурсивная процедура, проходящая по элементам ветки сверху вниз. И копирующая данные поэлементно. ничего больше посоветовать не могу, кроме как написать такую процедуру самостоятельно. если для тебя обход дерева не проблема (а примеры есть), то и копирование также легко сделаешь. тут никаких алгоритмических секретов нет.

RESEt
Сообщения: 4
Зарегистрирован: 20 янв 2006, 12:15

Сообщение RESEt » 20 янв 2006, 15:33

Обход-то не проблема. А вот именно копирование.... Пишу ХП для этого дела сейчас, в ней никак не могу уследить за новыми родителями... путаюсь...
Пробовал и вширь и вглубь :) обходить дерево...
Тугой день - пятница...

Зато IBAnalyst скачал. Здоровская вещь!

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 20 янв 2006, 16:17

если ты же на sql.ru поднял тему, то ну и намутил в процедуре... Ты найти на сайте в качестве болванки подходящую рекурсивную процедуру для обхода дерева. А потом к ней лепи копирование.

RESEt
Сообщения: 4
Зарегистрирован: 20 янв 2006, 12:15

Сообщение RESEt » 20 янв 2006, 17:09

Обход дерева не проблема: это процедура GET_CHILD_CELLS...
В понедельник я попаду... :)

Ответить