- •Введение.
- •Лекция 1. Введение в клиент-серверные субд.
- •Interbase sql Server. Общие сведения.
- •Платформы
- •Типы приложений
- •Файлы базы данных InterBase
- •Лекция 3. Триггеры и хранимые процедуры
- •Хранимые процедуры (Stored Procedures)
- •Терминаторы
- •Заголовок
- •Тело процедуры
- •Блок кода процедуры
- •Оператор присваивания
- •Условный оператор if… then … else
- •Оператор select
- •Цикл for select и suspend
- •Цикл while … do
- •Операторы insert, update, delete
- •Оператор execute procedure
- •Исключения
- •События и оператор post_event
- •Изменения и удаления хранимых процедур
- •Примеры создания и вызова хранимых процедур
- •Генераторы
- •Увеличение шага генератора
- •Триггеры
- •Переменные new и old
- •Реализация автоинкрементных ключевых полей
- •Лекция 4. Транзакции. Механизм транзакций
- •Атомарность (Atomicity)
- •Согласованность (Consistency)
- •Изолированность (Isolation)
- •Устойчивость (Durability)
- •Неявный и явный старт транзакций
- •Как транзакция работает
- •Уровни изолированности транзакций
- •Параметры транзакций
Заголовок
Заголовок процедуры состоит из следующих разделов:
Имя процедуры - обязательный элемент. Имя должно быть уникальным во всей базе данных. Пример:
CREATE PROCEDURE Proc1
Входные параметры - необязательный элемент. Входные параметры, как и в процедурах Delphi, служат для передачи в процедуру каких-то значений из внешнего приложения, другой процедуры или триггера. При этом типы данных этих параметров могут быть любыми, определенными в SQL, кроме массивов. Параметры объявляются в виде списка " параметр тип ", несколько параметров разделяются запятой. Имена входных параметров процедуры не обязаны соответствовать именам параметров вызывающего приложения, но типы данных должны совпадать. Пример:
CREATE PROCEDURE Proc2
(perem1 Integer, perem2 Float, perem3 Date)
Выходные параметры - необязательный элемент. Выходные параметры служат для возврата в вызывающее приложение списка результирующих значений. Объявление выходных параметров (если они есть), начинается ключевым словом RETURNS, после которого в скобках параметры перечисляются в виде списка " параметр тип ". Пример:
CREATE PROCEDURE Proc3
(vhod_param1 Integer)
RETURNS (vihod_param1 Double, vihod_param2 Varchar(10))
Ключевое слово AS - обязательный элемент, указывающий на окончание заголовка процедуры. Пример:
CREATE PROCEDURE Proc4
RETURNS (param char(50))
AS
Тело процедуры
Хранимые процедуры, как и процедуры в Delphi, могут иметь локальные переменные, или не иметь их. Если локальных переменных нет, тело процедуры представляет собой только составной оператор, заключенный в скобки BEGIN … END. Причем эти скобки обязательны, даже если в процедуре всего только один оператор.
Если же локальные переменные имеются, то вначале их нужно объявить после ключевых слов DECLARE VARIABLE, после чего следует составной оператор. При этом следует помнить, что объявление каждой переменной является отдельным оператором и должно завершаться точкой с запятой. Пример:
SET TERM ^;
CREATE PROCEDURE MyProc (param1 Integer)
RETURNS (param2 Varchar(20), param3 Double Precision)
AS
DECLARE VARIABLE perem1 Varchar(10);
DECLARE VARIABLE perem2 Date;
DECLARE VARIABLE perem3 Integer;
BEGIN
…
END^
SET TERM ;^
В приведенном примере мы вначале переопределяем терминатор, после чего приступаем непосредственно к описанию процедуры. В процедуре имеется один входящий, и два выходящих параметра, а также объявлены три локальные переменные. Заметим, что ключевое слово DECLARE обязательно, а вот слово VARIABLE можно опустить. Если вы желаете, чтобы ваша база данных была совместима с ранними версиями InterBase, то VARIABLE лучше указывать. Завершается процедура новым терминатором "^", после чего мы переопределяем его на стандартный символ ";".
Блок кода процедуры
Блок кода процедуры начинается ключевым словом BEGIN, и оканчивается ключевым словом END. Блок кода может состоять из одного или нескольких операторов, а также содержать вложенные блоки кода BEGIN … END.
В блоке кода процедуры могут встречаться:
операторы присваивания, которые присваивают значения локальным переменным, входным или выходным параметрам (в отличие от оператора ":=" в Delphi, в SQL это просто знак равно "=");
операторы SELECT для выборки данных из таблиц. Результаты выборки могут присваиваться переменным или параметрам;
циклы, такие как FOR и WHILE ;
управляющие структуры IF ;
операторы EXECUTE PROCEDURE для вызова другой хранимой процедуры;
комментарии, заключенные в скобки /* … */ ;
символы сравнения >=, >, <=, <, <>, =, !< (не меньше), !> (не больше), != (не равно);
команды модификации таблиц, такие как INSERT, UPDATE или DELETE ;
и др.
Важно! Если в блоке кода локальные переменные используются внутри SQL-оператора (например, SELECT ), перед их именами следует ставить двоеточие. В других операторах этого делать не нужно.