Средство EXECUTE STATEMENT предназначено только для очень осторожного использования и должно применяться с учетом всех факторов. Используемые в нем операции медленны и рискованны. Возьмите за правило применять его только в случае невозможности получить нужные результаты другими средствами или (что маловероятно) когда это действительно улучшает выполнение оператора. Будьте в курсе, что есть риск:
* не существует способа проверить синтаксис оператора в строке аргумента;
* не проверяются зависимости или существование защиты для предотвращения удаления или изменения таблиц или столбцов;
* операции выполняются медленно, потому что встроенный оператор должен подготавливаться на сервере каждый раз перед выполнением;
* если хранимая процедура имеет специальные привилегии к некоторым объектам, то динамический оператор, выдаваемый в строке EXECUTE STATEMENT, не наследует их. Используются те привилегии, которые имеет пользователь, выполняющий процедуру.
POST_EVENT
События Firebird предоставляют механизм сигнализации, который позволяет приложениям прослушивать изменения базы данных, сделанные параллельно выполняющимися приложениями, без необходимости расходовать ресурсы CPU или использовать сетевые ресурсы, опрашивая друг друга.
Синтаксис оператора:
POST_EVENT имя-события;
Это приводит к тому, что событие имя-события "отправляется" в стек, имя-события может быть любой строкой, содержащей до 78 символов и не требующей предварительного определения на сервере. Помещенные в стек события будут отправлены клиентам, "прослушивающим" события с помощью обработчика извещений (event alerter).
Когда транзакция подтверждается, все сообщения, появившиеся в триггерах и хранимых процедурах, отправляются прослушивающим клиентским приложениям. Приложение может отреагировать на сообщение, например, прочитав заново используемый набор данных.
Подробности см. в разд. "События" главы 32.
Разработка модулей
Разработка модулей PSQL является жизненно важной частью деятельности, как разработчика, так и администратора базы данных. Поскольку запросы администратора Firebird ясны, обычно на практике эти две роли объединяются. В процессе разработки обычно довольно большое количество разработчиков группы разрабатывает, тестирует и изменяет программные модули серверной стороны одновременно. Следовательно, меры, принимаемые для проектирования и стандартизации кода приложений, также важны и для кода PSQL.
Добавление комментариев
Код хранимой процедуры должен быть комментирован для помощи в отладке и в разработке приложений. Комментарии особенно важны в хранимых процедурах, потому что процедуры являются глобальными в базе данных и могут использоваться несколькими разработчиками приложений.
В заголовок и тело модуля PSQL могут быть включены и многострочные, и встроенные комментарии. Синтаксис комментариев подробно обсуждался в главе 14 в разд. "Скрипты схемы".
Чувствительность к регистру и пробелы
Если при создании вами объектов базы данных были использованы квотированные идентификаторы, то все правила чувствительности к регистру, которые применялись к вашим данным динамического SQL, должны также применяться, когда вы ссылаетесь на эти объекты в операторах процедуры.
Весь остальной код не является чувствительным к регистру. Например (предполагая, что не использовались идентификаторы объектов с разделителями), следующие два фрагмента операторов являются эквивалентными:
CREATE PROCEDURE MYPROC...
create procedure myproc...
Компилятор не устанавливает ограничений на количество пробелов или символов перевода строки. Для читаемости вашего кода может быть полезным применение какой-либо формы стандартных соглашений о расположении вашего процедурного кода. Например, вы можете писать все ключевые слова в верхнем регистре, выделять код блоков, размещать объявления переменных на отдельных строках, помещать за- пятые-разделители в начале строки и т.д.
Управление вашим кодом
Учитывая, что языком высокого уровня для программирования на стороне сервера в Firebird является язык SQL и что исходный код представляется серверу в форме "супероператоров" DDL для компиляции в объекты базы данных, не удивительно, что вся поддержка кодов также выполняется с использованием операторов DDL. Эти операторы совместимы с соглашениями по поддержке других объектов в базе данных SQL.
* Переопределению скомпилированных объектов (хранимых процедур и триггеров) служит синтаксис ALTER PROCEDURE | TRIGGER. Для хранимых процедур Firebird также предоставляет синтаксис RECREATE PROCEDURE и (начиная с версии 1.5) CREATE или REPLACE PROCEDURE.
* Операторы DROP PROCEDURE | TRIGGER используются для удаления модулей.
Существует два способа управления процедурами и триггерами: интерактивно вводить операторы с использованием isql или другого инструмента, который может передавать DSQL, или с использованием одного или более выходных файлов, содержащих операторы определения данных, называемых скриптами.