Хранимые процедуры онлайн урок.


Предназначение процедур в MySQL схоже с предназначением функций в PHP. Это блок команд, которые имеют название и могут зависеть от параметров. Особенность процедур в том, что они не возвращают значений. Для того, чтобы создать процедуру, необходимо использовать оператор CREATE PROCEDURE после которого указать название, параметры и тело процедуры

CREATE PROCEDURE название ( параметры )
BEGIN
тело
END;

Создадим нашу первую процедуру:

CREATE PROCEDURE my_test()
BEGIN
END;

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

CALL my_test();

Теперь попробуем создать более содержательную процедуру. Для этого создадим тестовую таблицу

CREATE TABLE test_tbl (
id INT AUTO_INCREMENT,
foo VARCHAR(50),
PRIMARY KEY(id)
);

В процедуре определим вставку трех значений в таблицу. Проблема заключается в том, что при описании тела процедуры необходимо будет использовать разделитель запросов - символ ;

Это означает, что запрос исполнится до того, как мы закончим описание процедуры - это ошибка. Потому для этого используют своеобразное переименование ограничителей. Это осуществляется оператором DELIMITER после которого записывается новый ограничитель.

DELIMITER $$
CREATE PROCEDURE my_test2()
BEGIN
INSERT INTO test_tbl VALUES (null, 'bla');
INSERT INTO test_tbl VALUES (null, 'blabla');
INSERT INTO test_tbl VALUES (null, 'blablabla');
END $$

В первой строке мы переопределяем ограничитель на $$. После оператора END мы его используем для того, чтобы система приняла этот запрос. Следующее действие - вернуть привычный ограничитель

DELIMITER ;

Далее - вызов процедуры:

CALL my_test2();

Результат:

+----+-----------+
| id | foo |
+----+-----------+
| 1 | bla |
| 2 | blabla |
| 3 | blablabla |
+----+-----------+