Язык хранимых процедур и триггеров (язык InterBase). Разделители в хранимых процедурах. Использование переменных

Страницы работы

Содержание работы

Язык хранимых процедур и триггеров (язык InterBase)

Язык, используемый при написании триггеров и хранимых процедур, является полноценным языком программирования. В языке допустимы любые действия с БД, за исключением создания БД и изменения метаданных. Можно использовать инструкции SQL такие как: INSERT, UPDATE, DELETE, SELECT. Нельзя устанавливать и разрывать связь с БД, манипулировать транзакциями, открывать наборы данных.

При создании процедур и триггеров в синтаксисе выделяют заголовок и тело процедуры. Тело является блоком операторов, который заключается в операторные скобки begin-end. Блоки операторов могут быть как независимыми, так и вложенными друг в друга.

1.  Разделители в хранимых процедурах

Любой оператор внутри процедуры заканчивается символом (;). Известно, что точка с запятой является завершением любой инструкции SQL, то есть является сигналом интерпретатору SQL, что текст инструкции можно обрабатывать.

Чтобы избежать двусмысленности, при создании хранимых процедур и триггеров используется оператор SET TERM, который меняет перед каждой командой создания хранимой процедуры (триггера) разделитель команд SQL на другой символ, отличный от точки с запятой, а после текста процедуры восстанавливает его обратно.

Пример.

SET TERM ^  ;

CREATE PROCEDURE s_p

END ^

SET TERM ; ^

2.  Использование переменных

При описании каждой переменной задается ее имя и тип данных. Имя каждой переменной должно быть уникальным среди имен внутренних переменных (локальные переменные, входные и выходные параметры). Имена внутренних переменных могут совпадать с именами столбцов таблицы, поскольку имена столбцов используются только в инструкциях SQL. В этих инструкциях именам внутренних переменных должен предшествовать символ двоеточия.

Типом данных при описании переменной может быть любой допустимый в БД тип, за исключением BLOB.

Локальные переменные описываются в заголовке триггера или процедуры.

DECLARE VARIABLE <имя переменной> <тип данных>;

Каждая локальная переменная задается отдельной строкой. Можно задать любое количество локальных переменных для одной процедуры (триггера).

Входные и выходные параметры используются только в хранимых процедурах, описываются они в заголовке процедуры.

3.  Операторы

Оператор присваивания.

<переменная> = <выражение>;

Выражение возвращает значение, соответствующее типу данных переменной, которой это значение присваивается. Можно использовать арифметические, строковые и логические операции, встроенные в язык, а также функции, определенные пользователем.

Пример присваивания для числовых переменных:

var1 = var1 + 1;

Для строковых переменных можем использовать операцию конкатенации соединения нескольких строк в одну:

Name = name3 || ‘ ‘ || name2 || ‘ ‘ || name1;

Для получения значения искусственного первичного ключа мы можем использовать встроенную функцию GEN_ID:

Cod = GEN_ID (GENERATOR_1, 1);

Условный оператор.

IF (<условие>)

THEN <оператор>

[ ; ELSE <оператор> ];

Если в операциях сравнения участвуют столбцы, которые могут принимать значение NULL, то результатом всегда будет неопределенное значение – UNKNOWN. В этом случае не будут выполняться операторы после ключевого слова THEN, а будет выполняться оператор после слова ELSE. Это нужно иметь ввиду, чтобы избежать ошибок.

Оператор цикла WHILE-DO

WHILE (<условие>) DO <оператор>;

Использование одиночной инструкции SELECT

Мы можем использовать SELECT для получения одной строки из одной или нескольких таблиц. Такой оператор требует обязательного присутствия предложения INTO, в котом указывается, в какие внутренние переменные должны помещаться считанные из таблицы данные.

Пример.

SELECT AVG (SALARY), SUM (SALARY)

FROM STAFF

WHERE COD_ORG = 11

INTO :avg_salary, :sum_salary;

Здесь оператор SELECT находит в БД среднюю и суммарную зарплату сотрудников организации 11 и помещает полученные значения в локальные переменные. Перед именами локальных переменных надо поставить двоеточие.

Оператор FOR SELECT-DO

Очень полезный оператор в хранимых процедурах.

FOR <инструкция SELECT>

INTO <список переменных>

DO <оператор>;

С помощью этого оператора мы в хранимой процедуре можем выбирать произвольное количество строк из одной или более таблиц.

Оператор вызова хранимой процедуры

В хранимых процедурах или в триггерах можно вызвать в свою очередь хранимые процедуры. Для этого используется следующий оператор:

EXECUTE PROCEDURE <имя выполняемой хранимой процедуры>

[ ( <входной параметр> [, <входной параметр> ] ) ]

[RETURNING_VALUES (<выходной параметр> [, <выходной параметр> ] ) ];

Оператор EXIT

Оператор EXIT вызывает передачу управления на конечный оператор END, то есть приводит к завершению хранимой процедуры или триггера.

Похожие материалы

Информация о работе