- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри
Шрифт:
Интервал:
Закладка:
EXECUTE STATEMENT добавляет гибкости хранимым процедурам и триггерам, но с высоким риском ошибок. Возвращаемые значения жестко проверяются на типы данных, чтобы избежать непредсказуемых исключений преобразования данных. Например, строка '1234' может быть преобразована в целое, a 'abc' вызовет ошибку преобразования. Во время компиляции такая строка не может быть проанализирована и проверена.
Синтаксис:
[FOR] EXECUTE STATEMENT <строка>
[INTO :переменная1 [, :переменная2 [, :переменнаяN ] ] DO
<составной-оператор>];
<составной-оператор> = {оператор блок-операторов}
Конструирование выражения или строковой переменной для создания оператора DSQL в строке аргумента должно быть завершено к моменту выполнения EXECUTE STATEMENT. Выполняемый оператор DSQL в строке аргумента не может содержать никаких заменяемых параметров.
В своей простейшей форме EXECUTE STATEMENT выполняет оператор SQL, запрашивающий операцию, которая не возвращает строк данных, а именно:
* INSERT, UPDATE, DELETE;
* EXECUTE PROCEDURE;
* любой оператор DDL за исключением CREATE/DROP DATABASE. Например:
CREATE PROCEDURE EXEC_PROC (PROC_NAME VARCHAR (31))
AS
DECLARE VARIABLE SQL VARCHAR(1024);
DECLARE VARIABLE . . .
BEGIN
. . .
SQL = 'EXECUTE PROCEDURE ' || PROC_NAME;
EXECUTE STATEMENT SQL;
END ^
Процедура вызывает следующее:
EXECUTE PROCEDURE EXEC_PROC ( ' PROJECT_MEMBERS ' ) ;
Переменные значения в одиночном SELECTСледующий фрагмент кода показывает, как выполнять строку оператора SELECT, который возвращает одну строку в набор переменных. Как и любой другой оператор SELECT в модуле PSQL, он вызовет исключение, если оператор вернет множество строк. Здесь мы также можем выполнить нечто невозможное в обычном PSQL: выполнить операцию, включающую таблицу или столбец, чье имя неизвестно во время компиляции:
CREATE PROCEDURE SOME_PROC
(TABLE_NAME VARCHAR (31), COL_NAME VARCHAR (31))
AS
DECLARE VARIABLE PARAM DATE;
BEGIN
EXECUTE STATEMENT 'SELECT MAX ( ' || COL_NAME || ') FROM ' || TABLE_NAME
INTO : PARAM;
. . .
FOR SELECT . . . . FROM . . . .
WHERE END_DATE = : PARAM
INTO ... DO
. . .
END ^
Переменные значения в многострочном SELECTСинтаксис EXECUTE STATEMENT также поддерживает выполнение оператора SELECT внутри цикла FOR для возвращения по одной строки за раз в список переменных. Не существует ограничений на используемый оператор SELECT, однако помните, что во время компиляции синтаксический анализатор не может проверить содержимое строки.
CREATE PROCEDURE DYNAMIC_SAMPLE (
TEXT_COL VARCHAR(31),
TABLE_NAME VARCHAR (31))
RETURNS (LINE VARCHAR(32000))
AS
DECLARE VARIABLE ONE_LINE VARCHAR (100);
DECLARE VARIABLE STOP_ME SMALLINT;
BEGIN
LINE = ' ' ;
STOP_ME = 1;
FOR EXECUTE STATEMENT
'SELECT ' || TEXTCOL || ' FROM ' || TABLE_NAME
INTO :ONE_LINE DO
BEGIN
IF (STOP_ME > 320) THEN
EXIT;
IF (ONE_LINE IS NOT NULL) THEN
LINE = LINE || ONE_LINE || ' '
STOP_ME = STOP_ME + 1;
END
SUSPEND;
END ^
ПредостереженияСредство 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, или с использованием одного или более выходных файлов, содержащих операторы определения данных, называемых скриптами.
Интерактивный интерфейс кажется более быстрым и простым способом делать эти вещи - но только до первого раза, когда вам понадобится что-нибудь изменить, проверить и пересоздать. Использование скриптов рекомендуется, потому что скрипты не только предоставляют необходимую документацию кодов, но также могут содержать комментарии и могут легко модифицироваться.
Инструменты редактированияМожет быть использован любой текстовый редактор ASCII, который не сохраняет непечатаемые символы за исключением символа перевода строки (ASCII 13), возврата каретки (ASCII 10) и символа табуляции (ASCII 9). Некоторые редакторы имеют средства подсветки ключевых слов SQL: редакторы IDE для Borland Delphi и Kylix, а также некоторые другие инструменты, представленные в приложении 5.
! ! !
СОВЕТ. Утилита командной строки isql может быть использована в качестве редактора при употреблении команды EDIT. Эта команда будет использовать выбранный вами текстовый редактор, если вы установите в вашей системе соответствующие переменные окружения. В POSIX установите переменную окружения VISUAL или EDITOR. В Windows установите EDITOR.

