Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Вниз

Удаление древ. структуры   Найти похожие ветки 

 
Tup   (2004-05-14 12:47) [0]

Здравствуйте!

У меня в базе хранится древовидная структура в виде записей где поле PRE указывает на ID родителя. Есть ли готовая процедура по удалению всех элементов определенной ветки ??? То есть я хочу удалить ветвь и мне нужно вместе с ней удалить всё что в неё входит.

Помогите, пожалуйста !


 
jack128 ©   (2004-05-14 12:50) [1]

внешний ключ делай с каскадным удалением. Тогда при удалении родителя удалятся все дети


 
Курдль ©   (2004-05-14 12:50) [2]


> внешний ключ делай с каскадным удалением. Тогда при удалении
> родителя удалятся все дети

Да? Что-то я не уверен...


 
Tup   (2004-05-14 12:56) [3]

А в InterBase это есть ????


 
Соловьев ©   (2004-05-14 12:57) [4]


> [3] Tup

триггер на удаление


 
jack128 ©   (2004-05-14 12:58) [5]


> Да? Что-то я не уверен...
а ты проверь и убедись ;-))


 
Digitman ©   (2004-05-14 13:02) [6]


> Курдль ©   (14.05.04 12:50) [2]


почему не уверен ?


> Tup   (14.05.04 12:47)  


как вариант без использования внеш.ключа с каскадным удалением, можно в триггере BEFORE DELETE выполнить код вида

IF (можно_удалять_данный узел) THEN
DELETE FROM MyTable WHERE Pre = old.ID; /* попытаться сначала удалить дочерние узлы */
ELSE
EXCEPTION "Фигвам ! Нельзя удалять узел " || cast(old.ID as строка) "!";


 
Tup   (2004-05-14 13:02) [7]

А что в тригере писать то ??? :((


 
jack128 ©   (2004-05-14 13:12) [8]


> Digitman ©   (14.05.04 13:02)


> EXCEPTION "Фигвам ! Нельзя удалять узел " || cast(old.ID
> as строка) "!"
это описка или где то такой синтаксис есть? Вроде всегда был exception <exceptio_name> ???


 
Tup   (2004-05-14 13:14) [9]

Digitman

Дело в том что так я удалю только первичные дочерние узлы, но у них тоже есть дочерние ... Тут я думаю должна быть какая-то рекурсивная процедура и я подозреваю что это стандартная вещь... вот только найти не могу :(((


 
Vlad ©   (2004-05-14 13:15) [10]


> Tup   (14.05.04 13:14) [9]

Это как раз нестандартная вещь.
Должна быть именно рекурсивная ХП. Писать естественно самому.
Можешь в инете поискать примеры


 
Соловьев ©   (2004-05-14 13:16) [11]


> узлы, но у них тоже есть дочерние ...

в том и вся фишка - триггер то для всех :)


 
Vlad ©   (2004-05-14 13:17) [12]

Читать тут:
http://www.ibase.ru/develop.htm
раздел "Древовидные и иерархические структуры, хранение объектов"


 
Tup   (2004-05-14 13:17) [13]

Vlad


> Это как раз нестандартная вещь.
> Должна быть именно рекурсивная ХП. Писать естественно самому.
> Можешь в инете поискать примеры


Так я и надеялся что кто-нибудь распологает таким примером или знает где его взять :(


 
Digitman ©   (2004-05-14 13:22) [14]


> jack128 ©   (14.05.04 13:12) [8]


ну это псевдокод, разумеется) ... я не преследовал цели приводить синтаксически корректный код ..


> Вроде всегда был exception <exceptio_name> ???


не всегда ... именно такого синтаксиса, разумеется, нет .. но зато в ФБ с нек.пор допустима конструкция

exception <exception_name> <custom_excpt_text>

и я вообще не понимаю, как по сей день можно париться с очень сырым и ограниченным ИБ5 .. ФБ1.5 давно уже ведет нас к светлому завтра)


> так я удалю только первичные дочерние узлы, но у них тоже
> есть дочерние


ты забыл, что для каждого из удаляемых "прямых дочерних узлов" точно так же возникнет событие-триггер BEFORE DELETE, в котором каждый удаляемый "прямой доч.узел" волен будет точно так же удалить своих наследников, прежде чем будет удален сам


 
Tup   (2004-05-14 13:25) [15]

Digitman
О !! Ты наверное прав ! Я действительно забыл :)
Сейчас попробую.  Спасибо !


 
Johnmen ©   (2004-05-14 13:43) [16]

Только неясно, чем не нравится вариант jack128 ©   (14.05.04 12:50) [1] ?



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

Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.034 c
1-1085131221
Don
2004-05-21 13:20
2004.06.06
Поскажите аналог TaskBar-а, нужен для самапального шела


1-1085377101
AndrewK
2004-05-24 09:38
2004.06.06
Создание защищенного листа Excel из Delphi


3-1084452666
SergeyM
2004-05-13 16:51
2004.06.06
Прокрутка DBGrid?


6-1081586421
13-Drakosha
2004-04-10 12:40
2004.06.06
TSocketConnection


14-1085038070
XIII
2004-05-20 11:27
2004.06.06
Вопрос По PHP.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский