Хранимые процедуры MySQL, локальные и пользовательские переменные

Не всегда удобно умещать необходимые действия над СУБД в сложные sql запросы. Иногда в одном запросе действия могут конфликтовать друг с другом, да и по синтаксису легче разбить логику на более простые запросы. Тут могут помочь хранимые процедуры mysql, а также функции. Рассмотрим примеры хранимых процедур.

Есть две таблицы — ответов и голосов за них. Необходимо удалить отдельные голоса у ответов по определенным условиям. Ситуация выполнить это одним запросом осложнена во-первых тем, что поля в таблице ответов обновляются триггерами, при удалении записей из таблицы голосов. Во-вторых в таблице голосов десятки миллионов записей. Напишем такую хранимую процедуру:

Здесь мы используем пользовательские переменные и оператор REPEAT — это аналог конструкции do…while в других языках. Процедура принимает входящий параметр — максимальное число итераций цикла. Также итерации будут остановлены по условию отсутствия удаленных записей. Таким образом при вызове процедуры мы можем контролировать процесс.

Простейший пример процедуры с циклом из документации:

Другой вариант аналогичной по функционалу процедуры:

Здесь мы используем локальные переменные и удаляем, но без контроля максимального числа итераций.

Оставить комментарий

Ваш адрес email не будет опубликован.