В предыдущей статье рассматривались вопросы создания хранимых процедур, их запуска, использование параметров.
Рассмотрим некоторые управляющие конструкции, поддерживаемые MySQL в хранимых процедурах. Привожу в основном примеры без излишних подробностей, мне кажется, что все достаточно понятно.
IF
Пример. Запрашивается параметр. Процедура добавляет значение 1, затем выводит сообщение о том, равен ли 0 полученный результат.
CREATE PROCEDURE `proc_IF` (IN param1 INT) BEGIN DECLARE variable1 INT; SET variable1 = param1 + 1; IF variable1 = 0 THEN SELECT ' Результат равен 0'; ELSE SELECT ' Результат не равен 0'; END IF; END
CASE
CASE позволяет описать множество условий без использования вложенных конструкций IF. Следующий пример записывает в существующую таблицу table1 результат в зависимости от значений переменной param1.
CREATE PROCEDURE `proc_CASE` (IN param1 INT) BEGIN DECLARE variable1 INT; SET variable1 = param1 + 11; CASE variable1 WHEN 0 THEN INSERT INTO table1 VALUES (param1); WHEN 1 THEN INSERT INTO table1 VALUES (variable1); ELSE INSERT INTO table1 VALUES (9); END CASE; END
WHILE
Кроме цикла WHILE существуют циклические конструкции LOOP и REPEAT. Также можно использовать GOTO.
Процедура следующего примера запрашивает параметр param1. Затем записывает в таблицу table1 значения от 0 до этого параметра. В завершении сохраняет в параметре param1 (тип данного параметра INUOT, поэтому через него мы вводим и получаем значения) количество записей таблицы table1.
CREATE PROCEDURE `proc_WHILE` (INOUT param1 INT) BEGIN DECLARE variable1, variable2 INT; SET variable1 = 0; WHILE variable1 < param1 DO INSERT INTO table1 VALUES (variable1); SET variable1 = variable1 + 1; END WHILE; SELECT COUNT(*) INTO param1 FROM table1; END