Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Рекурсивные хранимые процедуры




 

Хранимую процедуру, которая вызывает сама себя, называют рекурсивной хранимой процедурой. Основная область применения рекурсивных хранимых процедур – деревья. Данные, которые имеют древовидную структуру, проще всего обрабатывать именно при помощи рекурсивных процедур.

 

Пусть имеется каталог бесконечной степени вложенности, хранящийся в таблице catalogs (см. пример ниже).

 

Таблица catalogs состоит из трех полей:

 

id_catalog – первичный ключ таблицы, снабженный атрибутом auto_increment;

name – название элемента каталога;

id_parent – вторичный ключ, указывающий на первичный ключ родительской записи, для корневых каталогов значение данного поля равно 0.

 

Структура представленного выше каталога выглядит следующим образом:

 

Компьютеры

Материнские платы

Процессоры

Intel

AMD

Видеокарты

NVidia

ATI

Оперативная память

Жесткие диски

Оргтехника

Принтеры

Сканеры

Копировальные аппараты

 

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

 

Замечание! СУБД MySQL не поддерживает рекурсивных функций.

 

 

Однако вызов процедуры delcat() на неподготовленной машине, скорее всего, закончится неудачно с выводом сообщения об ошибке: “ERROR 1456 (HY000): Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine delcat” (“Количество рекурсивных спусков функции delcat ограничено нулем, установите системную переменную max_sp_recursion_depth”). Значение системной переменной max_sp_recursion_depth по умолчанию равно 0, поэтому, чтобы функция могла осуществлять рекурсивный спуск, необходимо установить значение этой переменной, отличной от нуля (максимум 255). Так как максимальная глубина каталога не превышает 4, установим значение переменной, равное 4 (см. пример ниже).

 

 

Теперь можно воспользоваться процедурой delcat(). В приведенном ниже примере удаляется элемент каталога “Компьютеры” со всеми подчиненными элементами, для этого в качестве аргумента функции передается первичный ключ каталога – 1.

 

 




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 546; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.