time

MySQL: Хранимые функции и процедуры

mysql.png Начиная с версии MySQL 5.0 были добавлены хранимые функции и процедуры – набор SQL команд, представляющие собой программную логику сохраняемую в БД, которую в последствии можно будет вызвать.

Преимущества использования:

  • облегчается программная часть разработки, т.к. часть простых действий совершает сама БД
  • написанные функции и процедуры могут быть предварительно скомпилированные, что ускоряет выполнение

Хранимые подпрограммы сохраняются внутри таблицы proc базы mysql.

Для работы с хранимыми подпрограммами необходимы такие привилегии для пользователя: CREATE ROUTINE, ALTER ROUTINE, EXECUTE.

Набор команд используемых вместе с хранимыми подпрограммами:

Название Описание
CREATE PROCEDURE создание процедуры
CREATE FUNCTION создание функции
ALTER PROCEDURE изменение процедуры
ALTER FUNCTION изменение функции
DROP PROCEDURE удаление процедуры
DROP FUNCTION удаление функции
SHOW CREATE PROCEDURE proc_name показать текст процедуры proc_name
SHOW CREATE FUNCTION func_name показать текст функции func_name
SHOW PROCEDURE STATUS LIKE ‘proc_name’ показать характеристики процедуры proc_name
SHOW FUNCTION STATUS LIKE ‘func_name’ показать характеристики функции func_name
CALL proc_name() вызвать процедуру proc_name
DECLARE определение локальных переменных
SET изменение значений локальных и глобальных переменных
SELECT … INTO сохранение значения указанного столбца в переменную
IF условный оператор if-then-else-end
CASE … WHEN оператор выбора
LOOP,REPEAT,WHILE циклы
RETURNS возвращение значения из функции

Создание и изменение переменой:

DECLARE val INT DEFAULT 0;
SET val = 5;

Создание функции:

DELIMITER //
CREATE FUNCTION func() RETURNS INTEGER
BEGIN
DECLARE val INTEGER;
SELECT id INTO val FROM table;
RETURN IFNULL(val, 0);
END//
DELIMITER ;

DELIMITER указывает на символ-разделитель строки с командой, т.к. внутри CREATE FUNCTION есть набор вложенных команд, то для них мы оставляем стандартный разделитель ; а для указания завершения самой CREATE FUNCTION указываем //

Выполнение созданной функции:

SELECT func();

Удаление созданной функции:

DROP FUNCTION IF EXISTS func;

Просмотр хранимых подпрограмм в БД dbname

SELECT ROUTINE_TYPE, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='dbname';

Дополнительное чтиво:

blog comments powered by Disqus