Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Шрифт:
Объявляйте в заголовке:
* имя процедуры, которое обязательно и должно быть уникальным в базе данных, например:
CREATE PROCEDURE MyProc
* любые необязательные входные параметры (аргументы), требуемые в процедуре, с их типами данных. Список заключается в скобки, параметры отделяются друг от друга запятыми, например:
CREATE PROCEDURE MyProc (invarl integer, invar2 date)
* имя каждого аргумента должно быть уникальным в процедуре. Тип данных может быть любым стандартным типом данных SQL за исключением массива типов
данных.
* любые необязательные выходные параметры (аргументы), требуемые в процедуре, с их типами данных. Список следует за ключевым словом RETURNS. список заключается в скобки, параметры отделяются друг от друга запятыми, например:
CREATE PROCEDURE MyProc
(invar1 INTEGER, invar2 DATE)
RETURNS (outvar1 INTEGER, outvar2 VARCHAR(20), outvar3 DOUBLE PRECISION)
* имя каждого аргумента должно быть уникальным в процедуре. Тип данных может быть любым стандартным типом данных SQL за исключением массива типов данных;
* ключевое слово AS, которое обязательно:
CREATE PROCEDURE MyProc
(invar1INTEGER, invar2 DATE)
RETURNS(outvar1 INTEGER, outvar2 VARCFAR(20), outvar3 DOUBLE
PRECISION)
AS
Элементы тела
Синтаксис:
< тело-процедуры> = [<список-объявлений-переменных>] <составной-оператор>
Если вам нужно объявить локальные переменные, то это следует сделать далее. Каждое объявление завершается точкой с запятой. В версии 1.5 переменные при их объявлении могут инициализироваться. Синтаксис:
<список-объявлений-переменных> =
DECLARE [VARIABLE] переменная тип-данных [{'=' | DEFAULT} значение];
[DECLARE [VARIABLE] переменная тип-данных; . . .]
Пример:
CREATE PROCEDURE MyProc (
invar1 INTEGER,
invar2 DATE)
RETURNS (
outvar1 INTEGER,
outvar2 VARCHAR(20),
outvar3 DOUBLE PRECISION)
AS
DECLARE VARIABLE localvar integer DEFAULT 0;
DECLARE VARIABLE anothervar DOUBLE PRECISION = 0.00;
! ! !
ПРИМЕЧАНИЕ. Ключевое слово VARIABLE необязательно в версии 1.5 и выше.
. ! .
Следом идет главный блок кода, обозначенный в описании синтаксиса как <составной-оператор>. Он начинается ключевым словом BEGIN и заканчивается ключевым словом END.
Синтаксис:
<составной-оператор> =
BEGIN
<составной-оператор>
[<составной-оператор> ...]
END <терминатор>
Все
CREATE PROCEDURE MyProc (
invar1 INTEGER,
invar2 DATE)
RETURNS (
outvar1 INTEGER,
outvar2 VARCHAR(20),
outvar3 DOUBLE PRECISION)
AS
DECLARE VARIABLE localvar integer DEFAULT 0;
DECLARE VARIABLE anothervar DOUBLE PRECISION = 0.00;
BEGIN
< составной-оператор>
END &
Элементами в <составной-оператор> могут быть: любой одиночный оператор, блок операторов и вложенные блоки операторов, заключенные в операторные скобки BEGIN и END. Блоки могут включать:
* операторы присваивания, устанавливающие значения локальным переменным и входным/выходным параметрам;
* операторы SELECT для помещения значений столбцов в переменные. Операторы SELECT должны иметь предложение INTO в качестве последнего предложения и объявления соответствующих локальных переменных или выходных аргументов для каждого выбранного столбца;
* структуры циклов, такие как FOR SELECT ... DO и WHILE ... DO для выполнения условных или циклических задач;
* структуры ветвления с использованием IF ... THEN ... [ELSE];
* операторы EXECUTE PROCEDURE для вызова других процедур с необязательным предложением RETURNING_VALUES для получения значений переменных. Допустима рекурсия;
* операторы SUSPEND и EXIT, возвращающие управление и, возможно, значения вызвавшему приложению или модулю PSQL;
* комментарии для аннотирования кода процедуры;
* операторы EXCEPTION для возврата приложениям пользовательских сообщений об ошибках или для задания условий для обработчиков исключений;
* операторы WHEN для обработки особых или общих условий ошибок.
* операторы POST_EVENT для добавления в стек сообщений о событиях. Пример:
BEGIN
FOR SELECT COL1, COL2, COL3, C0L4
FROM TABLEA INTO :COL1, :COL2, :COL3 DO
BEGIN
<операторы>
END
<операторы>
END &
SET TERM ; &
COMMIT;
Обратите внимание на завершение всего объявления процедуры символом терминатора, ранее определенного оператором SET TERM. После текста тела процедуры символ терминатора устанавливается в значение по умолчанию точка с запятой. Так поступать следует не всегда. В скриптах DDL, где вы объявляете несколько модулей PSQL, вы можете сохранять альтернативный оператор текущим. Некоторые люди на практике используют альтернативный терминатор во всех своих скриптах, таким образом резервируя точку с запятой только для завершения оператора PSQL. Здесь дело в личных предпочтениях.