Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Неделя 04 Лекция 1 (6).doc
Скачиваний:
1
Добавлен:
13.11.2019
Размер:
160.77 Кб
Скачать

6.7.5. Поддержка целостности данных с помощью хранимых процедур.

Ранее отмечалось, что хранимые процедуры являются одним из способов поддержки целостности данных на стороне сервера, а не клиента. В логике хранимой процедуры можно проверять правила целостности и генерировать ошибку, если клиент запрашивает выполнение запрещенной операции. Например, ниже показан текст хранимой процедуры, выполняющей операции по определению автора книги в отношении Books, которая содержит все необходимые проверки допустимости этой операции. Если операция недопустима, после генерации соответствующей исключительной ситуации выполнение процедуры прекращается.

CREATE EXCEPTION AuthorNotFound "Автор не найден.";

CREATE PROCEDURE FindAuthor

(AuthorCode INTEGER,

BookCode INTEGER)

AS

DECLARE VARIABLE FindAuthorCode INTEGER;

/* В переменную помещаем результат поиска кода автора в таблице BookAuthors./*

BEGIN

SELECT ba.Code

FROM BookAuthors ba

WHERE ba.Code = AuthorCode

INTO :FindAuthorCode;

/* В переменную помещаем результат поиска кода автора в таблице BookAuthors./*

IF (FindAuthorCode IS NULL) THEN

/* В таблице BookAuthors заданного кода автора книги не обнаружено./*

BEGIN

EXCEPTION AuthorNotFound;

SUSPEND;

END

ELSE

/* В таблице BookAuthors обнаружен заданный код автора книги./*

BEGIN

UPDATE Books

SET AuthorCode = FindAuthorCode

WHERE Code = :BookCode

SUSPEND;

END

END

Обратите внимание на еще одну функцию языка описания данных сервера InterBase — поддержку исключительных ситуации (EXCEPTION). Они представляют собой поименованные сообщения об ошибках, генерируемые в хранимой процедуре при обнаружении ошибочной ситуации. При возникновении исключительной ситуации в вызывающее приложение возвращается сообщение об ошибке и выполнение хранимой процедуры завершается. Однако исключительную ситуацию можно обработать и внутри хранимой процедуры, после чего продолжить ее выполнение.

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

EXCEPTION ExceptionName;

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

Контрольные вопросы:

  1. На что указывает определитель NULL и как его понимать?

  2. Чем отличается нулевое численное значение или заполненная пробелами текстовая строка от определителя NULL.

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

  4. Сформулируйте ограничение целостности, которое касается внешних ключей.

  5. Что такое корпоративные ограничения целостности?

  6. Какие разновидности хранимых процедур Вы знаете?

  7. Каковы особенности хранимых процедур выбора?

  8. Каковы особенности хранимых процедур действия?

  9. Какие преимущества хранимых процедур Вы знаете?

  10. Для чего служит аппарат генераторов в Interbase?

  11. Что такое триггер? Каковы его особенности?

  12. Какие события изменения таблицы базы данных могут вызвать выполнение тела триггера?

  13. Какие преимущества использования триггеров Вы знаете?

  14. Как и какие каскадные воздействия обеспечиваются с помощью триггеров?

21