Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление дочерних узлов [D5, IB6.x]


RDA ©   (2002-07-16 17:47:00) 

Мастера подскажите как удалить дочерние узлы в дереве. Думаю что тригером BEFORE DELETE но как не пойму.


kaif   (2002-07-17 12:37:00) [1]

Можно сделать и по FOREIGN KEY. Однако я боюсь, сначала надо будет добавить 1 корневую запись (с ID=0 и Parent_ID=0). Сделать ее на всякий неудаляемой (в триггере). Потом установить отношение FOREIGN KEY (ID) REFERENCES <та же таблица>(PARENT_ID) ON DELETE CASCADE.
IB поддерживает FOREIGN KEY таблицы на себя.
Хотя я предпочитаю в данном случае использовать триггер.


Sergey13   (2002-07-17 10:32:00) [2]

2Leonid © (17.07.02 10:19)
Ценное замечание по вопросу для IB6 8-)
Типа уж если на Оракле прокатило то уж ИБ точно проглотит?


Leonid   (2002-07-17 10:19:00) [3]

Проверено на Oracle каскадное удаление по форинкею on self references table работает without any problem


Sergey13   (2002-07-17 09:13:00) [4]

Не уверен, что сработает, но попробовать можно. Если поставить каскадное удаление по форинкею Parent_Id-Id то должно все удалиться и без тригера.


RDA   (2002-07-17 09:03:00) [5]

Благодарствую


kaif   (2002-07-16 18:46:00) [6]

А чего тут думать?
Зависит от того, как дерево организовано.
В классическом случае (если поля ID,PARENT_ID, NAME) в триггер пишешь:
DELETE FROM <Table> WHERE PARENT_ID = OLD.ID;
Триггер рекурсивно сработает для всех вложенных узлов.


Наверх

Титульная страница Поиск, карта сайта Написать письмо