Хранимая процедура – это откомпилированная во внутреннее представление сервера СУБД подпрограмма, хранящаяся в базе данных. Хранимые процедуры пишутся на специальном языке хранимых процедур и триггеров, в котором имеются операторы присваивания, ветвлений и циклов, и в которых можно использовать операторы SQL, такие как INSERT, DELETE, UPDATE и SELECT.
Хранимые процедуры позволяют переносить часть прикладных функций, связанных с обработкой данных, в саму данных. Например, хранимая процедура может управлять приемом заказа или переводом денег с одного банковского счета на другой. Для автоматического выполнения хранимых процедур при возникновении в базе данных определенных условий используются триггеры.
Хранимые процедуры создаются оператором CREATE PROCEDURE, в котором указываются следующие элементы:
1. имя хранимой процедуры;
2. входные и выходные параметры и их типы;
3. имена и типы данных локальных переменных, используемых процедурой;
4. последовательность инструкций, которые выполняются при вызове процедуры.
С помощью входных параметров внутрь хранимой процедуры можно передать значения, которые будут использоваться в ходе выполнения процедуры. С помощью выходных параметров хранимые процедуры возвращают значения, вычисленные в ходе выполнения процедуры.
Многие СУБД поддерживают хранимые функции, которые отличаются от хранимых процедур тем, что возвращают значение. InterBase не поддерживает хранимых функций. В InterBase для возврата значений из хранимых процедур применяются выходные параметры.
Некоторые СУБД поддерживают параметры, которые одновременно являются и входными, и выходными. InterBase не поддерживает такой возможности.
Для параметров и локальных переменных хранимых процедур используются те же типы данных, которые поддерживаются СУБД для столбцов таблиц.
Синтаксис оператора создания хранимой процедуры в InterBase:
CREATE PROCEDURE Имя_Процедуры
[(Параметр <тип данных> [,
Параметр <тип данных>...])]
[RETURNS (Параметр <тип данных> [,
Параметр <тип данных>...])]
AS [<список переменных>] <блок>;
<список переменных> =
DECLARE [VARIABLE] Переменная <тип данных>;
[DECLARE [VARIABLE] Переменная <тип данных>;...]
<блок> =
BEGIN
<составной оператор>
[<составной оператор>...]
END
<составной оператор> = <блок> | Оператор;
<тип данных> = один из типов данных InterBase
Оператор – любой одиночный оператор языка хранимых процедур и триггеров InterBase.
Внутри хранимых процедур может быть предусмотрена обработка исключений. Хранимые процедуры могут быть вложенными и рекурсивными, т.е. вызывающими сами себя.
Основные преимущества хранимых процедур:
1. Производительность – перенос на сервер часто используемых действий приводит к существенному повышению производительности.
2. Многократное использование кода – части приложения, перенесенные на сервер, могут использоваться любыми другими приложениями, имеющими доступ к серверу.