Вход/Регистрация
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
вернуться

Борри Хелен

Шрифт:

Таким образом, включайте оператор SET TERM В isql, если вы используете этот инструмент интерактивно, а также включайте его в скрипты.

Альтернативный терминатор может быть любой, нравящейся вам строкой символов, за исключением точки с запятой, пробела и апострофа. Если вы используете буквенный символ, он будет чувствительным к регистру. Если вам так нравится, можете задать терминатор, содержащий несколько символов, включая пробелы; он только не может быть зарезервированным ключевым словом. Оба следующих оператора допустимы:

SET TERM ^

SET TERM boing! ;

! ! !

СОВЕТ. He будьте только слишком изобретательными при создании ваших строк терминаторов, иначе вам придется набирать большой текст!

. ! .

В определениях PSQL применяйте точку с запятой во всех внутренних операторах за исключением BEGIN и END и используйте альтернативный терминатор в конечном операторе END:

. . .

END ^

Для возврата к "нормальному" оператору терминатора выдайте второй оператор SET TERM, который изменит результат первого:

. . .

END ^

COMMIT ^

SET TERM ;^

Рис. 29.1. Обязательные элементы в определении модуля PSQL

На рис. 29.1 основные элементы определения модуля PSQL отделены для иллюстрации требуемых элементов в секциях HEADER (Заголовок) и BODY (Тело) модуля.

Обязательные части затенены.

Элементы заголовка

Имя процедуры или триггера должно быть уникальным в базе данных.

Для триггера:

* ключевое слово FOR и ИМЯ таблицы идентифицируют ту таблицу, операции с которой вызывают данных триггер;

* режим (ACTIVE или INACTIVE);

* параметр фазы (BEFORE или AFTER) определяет, когда вызывается триггер;

* параметр события (INSERT, UPDATE, DELETE) [113] ;

* необязательное ключевое слово POSITION, за которым следует целое число, указывающее последовательность вызова.

Для хранимой процедуры:

* необязательный список входных параметров и их типов данных;

113

Начиная с версии 1.5. существует возможность объединять несколько событий в одном триггере. Подробности см. в главе 31.

* если процедура возвращает значения вызвавшей программе, то список выходных параметров и их типов данных.

Элементы тела

Для хранимых процедур и триггеров:

* тело модуля может начинаться со списка из одного или более объявлений локальных переменных (имя и тип данных SQL - домен указывать нельзя);

* блок операторов на языке процедур и триггеров Firebird, заключенный в операторные скобки BEGIN и END. Блок сам может включать другие блоки, следовательно, может существовать много уровней вложенности;

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

Элементы языка

В табл. 29.1 показаны элементы языка PSQL, доступные в Firebird.

Таблица 29.1. Расширения PSQL для хранимых процедур и триггеров

Оператор

Описание

В. 1.5

В. 1.0.x

BEGIN ... END

Определяет блок операторов, которые выполняются как одно целое. Зарезервированное слово BEGIN начинает блок; зарезервированное слово END завершает его. Ни за одним из них не должна следовать точка с запятой. В версии 1.0.x нельзя выдать оператор CREATE PROCEDURE без хотя бы одного оператора между BEGIN и END. "Пустые" определения допустимы в версии 1.5 и выше

Да

Да

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

Присваивает значение выражения переменной- локальной переменной, входному параметру или выходному параметру

Да

Да

/* текст комментария */

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

Да

Да

– - текст комментария

Комментарий программиста из одной строки, где текст может быть встроенным (только версия 1.5) или может занимать одну строку, где маркер двойного минуса (-) является первым элементом в строке

Да

Да

EXCEPTION имя-исключения

Вызывает именованное исключение для возможной обработки в блоке WHEN. Само исключение должно быть предварительно определено администратором базы данных с использованием CREATE EXCEPTION

Да

Да

EXCEPTION

Вызывает исключение

Да

Нет

EXCEPTION имя-исключения сообщение-времени-выполнения

Вызывает именованное исключение и присоединяет к нему сообщение времени выполнения - локальную переменную типа VARCHAR, которой во время выполнения может быть присвоено значение. Подробности определения и использования исключений см. в главе 32

Да

Нет

EXECUTE PROCEDURE имя-процедуры [переменная [, переменная ...]] [ RETURNING_VALUES переменная [, переменная. . .]]

Выполняет хранимую процедуру имя- процедуры. Входные аргументы следуют за именем процедуры; возвращаемые значения следуют за ключевым словом RETURNING VALUES. Допустимы вложенные процедуры и рекурсия. Входные и выходные параметры должны быть переменными, определенными в процедуре

Да

Да

EXECUTE STATEMENT <строка>

Выполняет оператор динамического SQL, содержащийся в <строка>

Да

Нет

EXIT

Переходит на конечный оператор END. Необязателен

Да

Да

FOR ... SELECT ... INTO ... DO

Синтаксис составного блока цикла для обработки неявного курсора и (необязательной) генерации виртуальной таблицы для направления выхода запроса SELECT клиенту. Подробности см. в разд. "SELECT для множества строк"

Да

Да

IF . . . THEN .. . [ELSE] ...

Синтаксис составного ветвления. Подробности см. в разд. "Условные блоки" позже в этой главе

Да

Да

LEAVE [114]

Оператор не принимает параметров. Используется для выхода из цикла. Выполнение переходит к первому оператору, следующему за концом того блока, который включает цикл, где был выполнен оператор LEAVE

Да

Нет

NEW. имя-столбца

Только триггеры. Контекстные переменные, доступные для триггеров INSERT и UPDATE. Существует одна переменная NEW для каждого столбца таблицы, содержащая новое значение, передаваемое клиентским запросом. Также доступна в некоторых ограничениях CHECK. Заметим, что в версии 1.5 в триггерах для нескольких действий ссылка на NEW. переменная не является ошибкой, поскольку она вернет NULL, если используется в контексте удаления

Да

Да

OLD.имя-столбца

Только триггеры. Контекстные переменные, доступные для триггеров INSERT и DELETE. Существует одна переменная OLD для каждого столбца таблицы, содержащая значение, которое имел столбец до выдачи клиентского запроса. Также доступна в некоторых ограничениях CHECK. Заметим, что в версии 1.5 в триггерах для нескольких действий ссылка на OLD.переменная не является ошибкой, даже если триггер включает действия по добавлению данных. Она вернет NULL, если используется в контексте добавления

Да

Да

POST_EVENT имя-события

Помещает событие имя-события в стек. Имя события может быть произвольной строкой длиной до 78 символов и не является предварительно определенным на сервере. События из стека будут переданы клиентам, "прослушивающим" это событие через обработчик сообщений. Подробности см. в разд. "События" главы 32

Да

Да

SELECT ... INTO ...

Помещает выход обычного одиночного оператора SELECT в список предварительно объявленных переменных. Вызовет исключение, если оператор вернет множество строк

Да

Да

SUSPEND

Недоступен в триггерах! Оператор используется в процедурах, разработанных для вывода наборов множества строк в виде виртуальных таблиц - хранимые процедуры выбора. Он приостанавливает выполнение процедуры на время перемещения строки из кэша строк в клиентское приложение. Оператор не имеет этого эффекта в выполняемых хранимых процедурах, где он эквивалентен оператору EXIT

Да

Да

WHILE <условие> DO

Синтаксис условного цикла, при котором выполняется блок, пока условие не станет ложным. Подробности см. в разд. "Условные блоки" позже в этой главе

Да

Да

WHEN {ошибка [, ошибка . . . ] | ANY}

Синтаксис для обработки исключений. Аргументами могут быть одно или более определенных пользователем исключений или внутренне определенные исключения GDSCODE или SQLCODE. Подробности см. В главе 32

Да

Да

114

В версии 1.5 LEAVE заменяет недокументированный оператор BREAK, который был частично реализован в версии 1.0.x. Не используйте BREAK.

Программные конструкции

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

Блоки BEGIN ... END

PSQL является структурированным языком. После объявления переменных процедурные операторы заключаются в операторные скобки BEGIN и END. В процессе разработки логики процедуры могут быть добавлены другие блоки; любой блок может включать другой блок, заключенный в BEGIN и END.

Символ терминатора не используется в ключевых словах BEGIN и END, за исключением финального ключевого слова END, который закрывает процедурный блок и завершает оператор CREATE PROCEDURE или CREATE TRIGGER. Это финальное ключевое слово END имеет специальный терминатор, который был определен в операторе SET TERM до начала данного определения.

Условные блоки

PSQL распознает два типа условных структур:

* ветвление, управляемое блоками IF ... THEN И, возможно, ELSE;

  • Читать дальше
  • 1
  • ...
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: