Программирование >>  Построение запросов sql 

1 ... 73 74 75 [ 76 ] 77 78 79 ... 101


Для определения нового пользовательского исключения используется запрос CREATE EXCEPTON, имеющий следующий формат:

CREATE EXCEPTON имя исключения <сообщение>;, где <сообщение> - строка текста длиной до 78 символов, заключенная в апострофы.

Например, чтобы создать исключительную ситуацию с именем ExcErr и сообщением Ошибка, необходимо использовать следующий запрос: CREATE EXCEPTION ExcErr Ошибка;.

Для изменения текста сообщения служит запрос ALTER EXCEPTION, например:

ALTER EXCEPTION ExcErr Ошибка преобразования;.

Если требуется заново создать исключение со старым именем, то используется запрос RECREATE EXCEPTION. Если исключение не существует перед использованием этого запроса, то его использование эквивалентно выполнению запроса CREATE EXCEPTION. Если исключение уже существует, то запрос RECREATE EXCEPTION удаляет его (если оно не используется другими объектами) и создает полностью новый объект, например в следующем случае:

RECREATE EXCEPTION ExcErr Ошибка преобразования данных;.

Также может использоваться запрос CREATE OR ALTER EXCEPTION, который создает исключение, если оно не существует, или изменяет определение существующего исключения (даже если оно используется другими объектами БД).

Для удаления исключительной ситуации используется запрос DROP

EXCEPTION, например:

DROP EXCEPTION ExcErr;.

Следует отметить, что создать, пересоздать, изменить или удалить исключительную ситуацию можно как при выполнении соответствующего запроса в SQL-редакторе IBExpert, так и в тексте SQL сценария.

Чтобы активизировать в теле триггера или хранимой процедуры генерацию сообщения об исключительной ситуации и тем самым прервать выполнение триггера или хранимой процедуры, необходимо использовать следующую команду:

EXCEPTION имя исключения; .

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

Следует отметить, что можно заранее не создавать исключение, а генерировать исключительную ситуацию с сообщением, задаваемым во время выполнения. В таком случае активизация сообщения имеет следующий формат:

EXCEPTION имя исключения <сообщение>;.

При создании учебной базы данных определены три исключения: InsRestrict, DelRestrict и UpdRestrict (приложение Б). Примеры использования этих исключений, а также примеры определения и использования других исключений будут рассмотрены далее.



6.2. Хранимые процедуры

Хранимая процедура является набором инструкций, хранящимся на стороне СУБД. Набор инструкций обычно пишется в виде последовательности SQL-команд. ХП похожи на обыкновенные процедуры языков высокого уровня, у них могут быть входные и выходные параметры и использоваться локальные переменные. В них могут производиться числовые вычисления и операции над символьными данными, результаты которых могут присваиваться переменным и параметрам. Кроме того, в ХП могут выполняться стандартные операции с БД. Особенно важно то, что в ХП возможны циклы и ветвления.

Использование ХП имеет следующие преимущества [11, 18]:

- производительность. При создании текст процедуры оптимизируется и хранится в БД в откомпилированном виде. В таком виде процедура выполняется гораздо быстрее, чем в случае динамического компилирования каждого составляющего ее запроса. Выполняются ХП сервером, а не клиентом, что позволяет сократить сетевой трафик;

- модульное проектирование. Использование хранимых процедур часто позволяет значительно сократить объём кода клиентского приложения. Приложения, получающие доступ к одной и той же БД, могут совместно использовать одни и те же процедуры, и не нужно снова программировать одни и те же действия, благодаря чему уменьшается риск программных ошибок в клиентских приложениях и экономится время программиста;

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

- защита. В большинстве СУБД ХП считаются защищаемыми объектами и им назначаются отдельные привилегии. Пользователь, вызывающий ХП, должен иметь право на ее выполнение;

- простота доступа. В больших БД набор ХП может стать для прикладных программ основным средством доступа к БД. Часто вызов стандартной процедуры более понятен, чем выполнение последовательности SQL-команд (запросов);

- реализация деловой логики. Возможности условной обработки, предоставляемые ХП, часто используются для реализации бизнес-логики в БД. В хранимых процедурах можно реализовывать сложные алгоритмы обработки данных внутри базы, причем во многих случаях использование хранимых процедур позволяет чётко отделять алгоритмы логики программы от алгоритмов обработки данных.

6.2.1. Определение хранимых процедур

Хранимой процедурой (stored procedure) называется скомпилированная программа произвольной длины на процедурном языке СУБД, которая



хранится в БД как часть метаданных. Хранимые процедуры могут вызываться независимо - как в IBExpert, так и при выполнении SQL-сценария (в том числе в теле триггера и другой хранимой процедуры); Различают создание ХП и их вызов.

В Firebird хранимые процедуры создаются запросом CREATE PROCEDURE, имеющим следующий синтаксис:

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

[(вхоцной параметр1 <тип цанных>

[,вхоцной параметр2 <тип цанных> <значение>]])[ [RETURNS (выхоцной параметр1 <тип цанных> [,выхоцной параметр1 <тип цанных> AS <тело процецуры> [разцелитель .

Хранимая процедура может быть создана с помощью запроса CREATE PROCEDURE в SQL-редакторе IBExpert или в тексте SQL сценария.

Входные параметры хранимой процедуры указываются в скобках после имени создаваемой процедуры. Причем в качестве входных параметров могут использоваться выражения.

При объявлении входных параметров допускается задавать значения по умолчанию, например следующим образом:

CREATE PROCEDURE p1(x INTEGER = 123) RETURNS (y INTEGER) AS

Примечание. Параметры со значениями по умолчанию должны быть указаны последними в списке входных параметров, то есть нельзя объявить параметр, не имеющий значение по умолчанию, после параметров, объявленных со значением по умолчанию.

Подстановка значения по умолчанию происходит во время выполнения процедуры.

Предложение RETURNS предназначено для определения выходных параметров. Входные и выходные параметры могут использоваться в теле процедуры как обычные локальные переменные, определенные с помощью оператора DECLARE VARIABLE. Как уже было отмечено, в SQL-запросах локальные переменные, входные и выходные параметры должны использоваться с двоеточием перед именем переменной, чтобы отличать их от имен столбцов таблиц.

Тело процедуры и его составные части имеют следующие синтаксические конструкции:

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

[<список объявления переменных>[ <блок операторов>,

<список объявления переменных>::=



1 ... 73 74 75 [ 76 ] 77 78 79 ... 101

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика