Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.08;
Скачать: CL | DM;

Вниз

Удаление дочерних узлов   Найти похожие ветки 

 
RDA ©   (2002-07-16 17:47) [0]

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


 
kaif ©   (2002-07-16 18:46) [1]

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



 
RDA ©   (2002-07-17 09:03) [2]

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


 
Sergey13 ©   (2002-07-17 09:13) [3]

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


 
Leonid ©   (2002-07-17 10:19) [4]

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


 
Sergey13 ©   (2002-07-17 10:32) [5]

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


 
kaif ©   (2002-07-17 12:37) [6]

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



Страницы: 1 вся ветка

Текущий архив: 2002.08.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
14-24204
Billy
2002-07-14 05:01
2002.08.08
Потомки TObject


1-23989
MikeZ
2002-07-27 19:14
2002.08.08
Использование найденого свойства компонента


1-24061
Vladislav
2002-07-25 12:12
2002.08.08
Перемешать массив


7-24249
Deus
2002-04-03 10:30
2002.08.08
Как определить открыт или закрыт лоток CD-ROM?


14-24170
VS2001
2002-07-04 06:41
2002.08.08
У кого нибудь есть откомпилированные DesignEditors, DesignIntf ..