Spec-Zone .ru
спецификации, руководства, описания, API

19.2.1. Сохраненный Стандартный Синтаксис

Сохраненная подпрограмма является или процедурой или функцией. Сохраненные подпрограммы создаются с CREATE PROCEDURE и CREATE FUNCTION операторы (см. Раздел 13.1.15,"CREATE PROCEDURE и CREATE FUNCTION Синтаксис"). Процедура вызывается, используя a CALL оператор (см. Раздел 13.2.1,"CALL Синтаксис"), и может только пасовать назад значения, используя выходные переменные. Функция может быть вызвана изнутри оператора точно так же как любая другая функция (то есть, взывая к имени функции), и может возвратить скалярное значение. Тело сохраненной подпрограммы может использовать составные операторы (см. Раздел 13.6, "MySQL Compound-Statement Syntax").

Сохраненные подпрограммы могут быть отброшены с DROP PROCEDURE и DROP FUNCTION операторы (см. Раздел 13.1.26,"DROP PROCEDURE и DROP FUNCTION Синтаксис"), и измененный с ALTER PROCEDURE и ALTER FUNCTION операторы (см. Раздел 13.1.5,"ALTER PROCEDURE Синтаксис").

Хранимая процедура или функция связываются с определенной базой данных. У этого есть несколько импликаций:

Сохраненные функции не могут быть рекурсивными.

Рекурсия в хранимых процедурах разрешается, но отключается по умолчанию. Чтобы включить рекурсии, установите max_sp_recursion_depth системная переменная сервера к значению, больше чем нуль. Рекурсия хранимой процедуры увеличивает требование к стековому пространству потока. Если Вы увеличиваете значение max_sp_recursion_depth, может быть необходимо увеличить размер стека потока, увеличивая значение thread_stack при запуске сервера. См. Раздел 5.1.4, "Системные Переменные Сервера", для получения дополнительной информации.

MySQL поддерживает очень полезное расширение, которое включает использованию регулярных SELECT операторы (то есть, не используя курсоры или локальные переменные) в хранимой процедуре. Набор результатов такого запроса просто отправляется непосредственно клиенту. Многократный SELECT операторы генерируют многократные наборы результатов, таким образом, клиент должен пользоваться клиентской библиотекой MySQL, которая поддерживает многократные наборы результатов. Это означает, что клиент должен пользоваться клиентской библиотекой от версии MySQL, по крайней мере, столь же недавнего как 4.1. Клиент должен также определить CLIENT_MULTI_RESULTS опция, когда это соединяется. Для программ C это может быть сделано с mysql_real_connect() C API-функция. См. Раздел 22.8.7.53,"mysql_real_connect()", и Раздел 22.8.17, "Поддержка API C Многократного Выполнения Оператора".