Управляющие конструкции

В предыдущей статье рассматривались вопросы создания хранимых процедур, их запуска, использование параметров.

Рассмотрим некоторые управляющие конструкции, поддерживаемые 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

hr_proc_2

Кроме цикла 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

 

Поделиться:
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • LiveJournal
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • StumbleUpon
  • Technorati
  • БобрДобр
  • Memori.ru
  • МоёМесто.ru