Форум: "Базы";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];
ВнизУдаление дочерних узлов Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c