Расширения языка PSQL
Расширения языка PSQL
Расширения языка PSQL включают следующие языковые элементы:
* операторы BEGIN и END для выделения блоков кода, которые могут быть вложенными;
* операторы DECLARE VARIABLE для объявления локальных переменных;
* конструкция FOR SELECT <спецификация-выбора> INTO <список-переменных? DO инкапсулирует курсор SQL для выполнения цикла просмотра наборов. Циклы могут быть вложенными;
* циклы WHILE;
* оператор SUSPEND для пересылки строки в кэш строк;
* конструкция IF ... THEN и ELSE для ветвления в программе;
* оператор EXCEPTION <объявленное-имя-исключения> для вызова пользовательских исключений;
* необязательные блоки WHEN <условие-исключения> DO для перехвата и обработки исключений;
* POST_EVENT <строка> для передачи сообщений клиентам.
Firebird версии 1.5 и более поздние также поддерживает:
* оператор EXECUTE STATEMENT для выполнения специальных операторов DML и DDL в модуле;
* логические контекстные переменные UPDATING, INSERTING и DELETING;
* контекстная переменная ROW_COUNT для получения количества строк, полученных выполненным оператором DML в том же блоке;
* дополнительный синтаксис для EXCEPTION без аргументов - для повторного вызова исключений, а с необязательным текстовым аргументом - для передачи информации клиенту.
Ограничения PSQL
Существуют некоторые ограничения языка для кодов в модулях PSQL.
* Операторы, использующие подмножество языка определения данных (DDL) SQL Firebird, не разрешены в PSQL[111].
* Операторы управления транзакциями недопустимы в PSQL, потому что хранимые процедуры и триггеры всегда выполняются в контексте существующей клиентской транзакции, a Firebird не поддерживает вложенные транзакции.
* Некоторые другие типы операторов, зарезервированные для использования в других средах (например, в isql, скриптах или во встроенном SQL - см. следующий раздел). Допустимы все динамические операторы DML.
* Идентификаторы объектов метаданных, такие как имена таблиц, столбцов, просмотров или хранимых процедур, не могут передаваться хранимой процедуре или возвращаться хранимой процедурой в ее аргументах.
* Триггеры не могут получать или возвращать аргументы.