- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри
Шрифт:
Интервал:
Закладка:
. ! .
Полезной практикой является добавление расширения sql к именам файлов скриптов Firebird. Помимо пользы от идентификации скриптов в вашей файловой системе, расширение sql будет распознаваться как пакетный файл SQL многими инструментами редактирования, которые поддерживают подсветку синтаксиса SQL.
Компиляция хранимых процедур и триггеров
Для компиляции любого файла скрипта вы должны включить в файл, по крайней мере, одну "пустую строку" после последнего оператора или комментария. Чтобы сделать это, нажмите, по меньшей мере, один раз клавишу <Return> (Enter) в вашем текстовом редакторе. Когда вы завершите создание вашей процедуры, сохраните ее в файле с любым понравившимся вам именем.
Для компиляции вашей хранимой процедуры просто выполните ваш скрипт с использованием команды INPUT в isql или в интерфейсе обработки скриптов вашего инструмента управления базой данных.
Ошибки в скриптахFirebird генерирует ошибки в процессе синтаксического разбора, если присутствует некорректный синтаксис в операторе CREATE PROCEDURE | TRIGGER. Сообщения об ошибках выглядят следующим образом:
Dynamic SQL Error
-SQL error code = -104
-Token unknown - line 4, char 9
-tmp
Нумерация строк начинается со строки, содержащей оператор CREATE, а не С начала файла скрипта. Символы подсчитываются слева направо, а неопределенный элемент указывается либо в виде номера первого символа источника ошибки, либо в виде номера крайнего правого символа источника ошибки. Если есть сомнения, проверяйте всю строку для определения источника синтаксической ошибки.
! ! !
СОВЕТ. Если вы используете версию isql, более позднюю, чем Firebird 1.0, вы заметите улучшение ее возможностей в описании ошибок в скриптах и указании их расположения. Хотя Firebird не содержит средств отладки хранимых процедур, некоторые инструменты сторонних разработчиков имеют такие возможности.
. ! .
Зависимости объектовСервер Firebird педантичен при поддержке информации о взаимозависимостях между управляемыми им объектами. Необходимы специальные соглашения при выполнении изменений хранимых процедур, находящихся в текущий момент в использовании другими пользователями. Процедура находится "в использовании" (procedure is in use), когда она в настоящий момент выполняется, или если она была внутренне скомпилирована в кэш метаданных по запросу пользователя. Более того, сервер будет откладывать или запрещать компиляцию операторов ALTER или DROP, если скомпилированная версия будет найдена в кэше метаданных.
Изменения процедур не будут видны клиентским приложениям, пока они не отсоединятся от базы данных и вновь не присоединятся к ней.
! ! !
ПРИМЕЧАНИЕ. Триггеры и хранимые процедуры, вызывающие процедуры, которые были изменены или заново созданы, не имеют доступа к новой версии, пока база данных не окажется в состоянии, когда все клиенты будут отключены.
. ! .
Идеальный вариант - выдача операторов CREATE, RECREATE и ALTER для модулей PSQL в то время, когда не выполняется ни одно клиентское приложение.
Изменение и удаление модулейКогда вы изменяете процедуру или триггер, новое определение процедуры заменяет старую версию. Для изменения определения процедуры или триггера выполните следующие шаги:
1. Скопируйте файл исходного определения данных, содержащий оператор создания процедуры. В другом варианте - используйте isql -extract для выделения исходного текста процедуры или триггера из базы данных в текстовый файл.
2. Отредактируйте файл, заменив CREATE на RECREATE или ALTER и изменив определение желаемым образом.
3. Выполните измененный скрипт при "чистых" условиях, как было описано ранее. Для удаления модуля выполните:
DROP {PROCEDURE | TRIGGER} имя-модуля;
ПривилегииТолько пользователь SYSDBA или владелец процедуры/триггера может изменять или удалять его.
Ошибка "Объект находится в использовании"Ошибка "Object is in use" (Объект находится в использовании) расстраивает разработчика более чем какая-либо другая. Вы соединились с базой данных как пользователь SYSDBA или владелец базы данных. У вас исключительный доступ, что желательно при изменении метаданных, и вдруг появляется какой-то фантомный пользователь, использующий объект, метаданные которого вы собираетесь изменить или удалить.
Источником этой загадки может быть одна или более следующих ситуаций.
* При останове базы данных (shut down), подготовке к получению исключительного доступа вы (или другой человек) уже были соединены как пользователь SYSDBA, владелец или (в Linux/UNIX) как пользователь с подходящими привилегиями операционной системы. При проверке условий останова базы данных Firebird игнорирует таких пользователей и все их текущие транзакции или те, которые запускаются после начала останова. Любая неподтвержденная транзакция (какой бы она ни была - даже SELECT), которая использует этот объект или любой объект, зависящий от этого объекта, или объект, от которого зависит наш объект, будет вызывать эту ошибку.
* "Заинтересованная транзакция", которая остается в базе данных в результате ненормального завершения работы какого-либо пользователя и которая использует зависимости, связанные с нашим объектом, вызовет такую ошибку.
* Вы или другой пользователь с подходящими привилегиями ранее пытались переопределить или удалить этот объект или другой зависимый объект, и операция была отвергнута по той причине, что объект находился в использовании.
! ! !
ВНИМАНИЕ! Такая ситуация может провоцировать цепочку несогласованностей в вашей базе данных. Например, если gbak выполнялся в то время, когда база данных имела объекты в таком состоянии, то восстановление резервной копии может оказаться невозможным.
Всякий раз, когда вы видите такую ошибку и верите, что вы насколько возможно уменьшили вероятность ее появления, рассматривайте ее как сигнал, что ваша база данных нуждается в проверке до того, как вы продолжите любые дальнейшие изменения метаданных (см. главу 39).
. ! .
Для просмотра в isql списка процедур или триггеров и их зависимостей используйте команду SHOW PROCEDURES или SHOW TRIGGERS соответственно.
Удаление исходных текстов модулей
Разработчики часто хотят "спрятать" исходные коды их модулей PSQL при распространении баз данных. Вы можете удалить хранимые исходные тексты без воздействия на возможности модуля. Только убедитесь, что у вас есть последние версии скриптов, прежде чем это делать!
Исходные тексты всех модулей хранятся в системной таблице RDB$PROCEDURES и RDB $ TRIGGERS.
Удаление исходного текста процедуры:
UPDATE RDB$PROCEDURES
SET RDB$PROCEDURE_SOURCE = NULL
WHERE RDB$PROCEDURE NAME = 'MYPROC';
Удаление исходного текста триггера:
UPDATE RDB$TRIGGERS
SET RDB$TRIGGER_SOURCE = NULL
WHERE RDB$TRIGGER_NAME = 'MYTRIGGER';
! ! !
ВНИМАНИЕ! Имейте в виду, что такое удаление исходных кодов не остановит тех, кто серьезно собирается украсть ваш исходный код. Исполняемый код хранится в двоичном формате, который очень просто может быть преобразован обратно в PSQL. Следовательно, решите, будет ли выгода от утаивания PSQL больше затрат, которые вы и другие, кто поддерживает систему, понесут от потери возможности просмотра и выделения исходного текста.
. ! .
Пора дальшеДалее мы подробно рассмотрим возможности языка PSQL и техники, которые вы можете использовать для разработки хранимых процедур и структуризации вашего кода. Специальная тема в конце главы описывает RDB$DB_KEY, внутренний уникальный атрибут каждой строки в каждом наборе, который может быть полезен при оптимизации выполнения некоторых операций PSQL.
ГЛАВА 30. Хранимые процедуры.
Процедура является самостоятельной программой, написанной на языке PSQL Firebird, скомпилированной интерпретатором во внутренний двоичный язык Firebird и сохраненной как исполняемый код в метаданных базы данных. Однажды скомпилированная, хранимая процедура может быть вызвана непосредственно из приложения или другого модуля PSQL с использованием оператора EXECUTE PROCEDURE или SELECT в соответствии с заданным стилем процедуры.
Хранимые процедуры могут принимать входные параметры от клиентских приложений в качестве аргументов вызываемого запроса. Они могут возвращать приложениям набор значений в качестве выходных параметров.
Язык процедур и триггеров Firebird включает SQL-операторы манипулирования данными и некоторые мощные расширения, в том числе конструкции IF ... THEN ... ELSE, WHILE ... DO, FOR SELECT ... DO, определенные в системе исключения, обработку ошибок и события.
Хранимые процедуры могут быть вызваны из приложений с использованием динамических операторов SQL. Они также могут быть вызваны интерактивно из isql и из многих других инструментов работы с базами данных, рекомендованных для использования с Firebird. Исполняемые модули, включая вложенные процедуры, могут быть использованы в скриптах с тем ограничением, что все входные параметры являются константами и не существует выходных наборов. В скриптах не существует возможности передавать переменные параметры.

