Чтение онлайн

на главную - закладки

Жанры

Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Борри Хелен

Шрифт:

* "Заинтересованная транзакция", которая остается в базе данных в результате ненормального завершения работы какого-либо пользователя и которая использует зависимости, связанные с нашим объектом, вызовет такую ошибку.

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

! ! !

ВНИМАНИЕ! Такая ситуация может провоцировать цепочку несогласованностей в вашей базе данных. Например,

если 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. Исполняемые модули, включая вложенные процедуры, могут быть использованы в скриптах с тем ограничением, что все входные параметры являются константами и не существует выходных наборов. В скриптах не существует возможности передавать переменные параметры.

Выполняемые хранимые процедуры

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

Хранимые процедуры выбора

Хранимые процедуры выбора названы так, потому что они написаны с использованием некоторых специальных расширений языка для создания многострочных выходных наборов, возвращающихся вызвавшей программе, которая использовала запрос SELECT - "виртуальные таблицы".

Сервер не различает процедуры выбора и выполняемые процедуры. Если требуется, он попытается выбрать набор записей из выполняемой процедуры или выполнить что-нибудь в процедуре выбора- и, естественно, будет вызывать исключение, если возникнут ошибки в запросе! Это ваша задача убедиться, что ваш код на сервере делает именно то, что вы от него ожидали, и что код приложения посылает соответствующие запросы.

Создание хранимых процедур

В вашем скрипте или в isql начните с установки символа терминатора, который будет использован для отметки конца синтаксиса CREATE PROCEDURE. Следующий пример устанавливает символ терминатора в &:

SET TERM &;

Синтаксис оператора:

CREATE PROCEDURE имя-процедуры

[(аргумент тип-данных [, аргумент тип-данных [...]])]

[RETURNS (аргумент тип-данных [, аргумент тип-данных [...]])

AS

< тело -процедуры>

<тело-процедуры> =

[DECLARE [VARIABLE] переменная тип-данных;

[...]]]

BEGIN

<составной-оператор>;

END <терминатор>

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

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

Семья. Измена. Развод

Высоцкая Мария Николаевна
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Семья. Измена. Развод

Звездная Кровь. Изгой

Елисеев Алексей Станиславович
1. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой

На границе империй. Том 4

INDIGO
4. Фортуна дама переменчивая
Фантастика:
космическая фантастика
6.00
рейтинг книги
На границе империй. Том 4

Искушение генерала драконов

Лунёва Мария
2. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Искушение генерала драконов

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Камень Книга одиннадцатая

Минин Станислав
11. Камень
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Камень Книга одиннадцатая

Никто и звать никак

Ром Полина
Фантастика:
фэнтези
7.18
рейтинг книги
Никто и звать никак

Возвышение Меркурия. Книга 14

Кронос Александр
14. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 14

Идеальный мир для Лекаря 20

Сапфир Олег
20. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 20

Генерал Скала и ученица

Суббота Светлана
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Генерал Скала и ученица

Пограничная река. (Тетралогия)

Каменистый Артем
Пограничная река
Фантастика:
фэнтези
боевая фантастика
9.13
рейтинг книги
Пограничная река. (Тетралогия)

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Сумеречный Стрелок 2

Карелин Сергей Витальевич
2. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 2

Сумеречный Стрелок 10

Карелин Сергей Витальевич
10. Сумеречный стрелок
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Сумеречный Стрелок 10