Язык, используемый при написании триггеров и хранимых процедур, является полноценным языком программирования. В языке допустимы любые действия с БД, за исключением создания БД и изменения метаданных. Можно использовать инструкции SQL такие как: INSERT, UPDATE, DELETE, SELECT. Нельзя устанавливать и разрывать связь с БД, манипулировать транзакциями, открывать наборы данных.
При создании процедур и триггеров в синтаксисе выделяют заголовок и тело процедуры. Тело является блоком операторов, который заключается в операторные скобки begin-end. Блоки операторов могут быть как независимыми, так и вложенными друг в друга.
Любой оператор внутри процедуры заканчивается символом (;). Известно, что точка с запятой является завершением любой инструкции SQL, то есть является сигналом интерпретатору SQL, что текст инструкции можно обрабатывать.
Чтобы избежать двусмысленности, при создании хранимых процедур и триггеров используется оператор SET TERM, который меняет перед каждой командой создания хранимой процедуры (триггера) разделитель команд SQL на другой символ, отличный от точки с запятой, а после текста процедуры восстанавливает его обратно.
Пример.
SET TERM ^ ;
CREATE PROCEDURE s_p
…
END ^
SET TERM ; ^
При описании каждой переменной задается ее имя и тип данных. Имя каждой переменной должно быть уникальным среди имен внутренних переменных (локальные переменные, входные и выходные параметры). Имена внутренних переменных могут совпадать с именами столбцов таблицы, поскольку имена столбцов используются только в инструкциях SQL. В этих инструкциях именам внутренних переменных должен предшествовать символ двоеточия.
Типом данных при описании переменной может быть любой допустимый в БД тип, за исключением BLOB.
Локальные переменные описываются в заголовке триггера или процедуры.
DECLARE VARIABLE <имя переменной> <тип данных>;
Каждая локальная переменная задается отдельной строкой. Можно задать любое количество локальных переменных для одной процедуры (триггера).
Входные и выходные параметры используются только в хранимых процедурах, описываются они в заголовке процедуры.
Оператор присваивания.
<переменная> = <выражение>;
Выражение возвращает значение, соответствующее типу данных переменной, которой это значение присваивается. Можно использовать арифметические, строковые и логические операции, встроенные в язык, а также функции, определенные пользователем.
Пример присваивания для числовых переменных:
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, то есть приводит к завершению хранимой процедуры или триггера.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.