Хранимая процедура – это программа, написанная на языке SQL и хранящаяся на SQL сервере как часть данных в виде некоторого объекта с указанным именем. По имени процедуру можно вызвать для выполнения и получить от нее результат. Как и на другие объекты базы данных, на процедуру распространяется механизм прав использования.
SQL оператор create procedure создает новую процедуру, которая сохраняется на сервере. Оператор не описывает создаваемую процедуру, а реально создает ее, занося информацию о процедуре в базу данных. Запрос на создание процедуры, полученный от пользователя, компилируется, затем компонуется с процедурами, используемыми в запросе, и, наконец, выполняется. Процедуру, которая будет создаваться в запросе, в этом запросе вызвать нельзя – во время компоновки процедура еще отсутствует в базе данных.
Формат:
create procedure Имя_процедуры ( [ Параметр , ...] ) [ user { current | default } ] as [ Определение_локальных_переменных ... ] begin { Тело_процедуры }; end;
Параметр ::= Имя_параметра [ in | out | inout ]
Определение_локальных_переменных ::= declare variable Имя_переменной [ = Выражение ], ...;
Аргументы:
Аргумент
Значение
Имя_процедуры
Задает имя процедуры. Имя процедуры должно содержать буквы и цифры, должно начинаться с буквы и должно быть не длиннее 31 символа. Имена процедур должны быть уникальными и не должны совпадать с зарезервированными словами.
Параметры
Необязательная конструкция, которая задает имена параметров и тип вызова. Все параметры должны иметь уникальные имена. Конструкция out используется для выходных параметров и задает вызов по ссылке. Конструкция inout эквивалентна конструкции out и также задает вызов по ссылке. Конструкция in определяет входной параметр, для него действует вызов по значению.
Тело процедуры
Тело процедуры описывает те действия, которые необходимо выполнить при вызове процедуры.
user current
Необязательный параметр, который задает права, которые будут использоваться внутри процедуры. Если задана конструкция user current, то внутри процедуры действуют права пользователя, который создал процедуру.
user default
Необязательный параметр, который задает права, которые будут использоваться внутри процедуры. Если задана конструкция user default, то внутри процедуры будут действовать права, действовавшие до вызова процедуры.
Определение_локальных_переменных
См. подробнее в разделе «Переменные».
Ограничения:
· Максимальное количество параметров в процедуре – 31;
· Параметры, передаваемые по ссылке, нельзя использовать в запросах внутри процедуры, в частности в конструкции where. Чтобы обойти это ограничение, достаточно объявить в процедуре локальную переменную и присвоить ей значение параметра. Эту локальную переменную и следует использовать в запросах.
Пример:
Создать процедуру, которая вычисляет факториал от некоторого числа.