Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы экзамен_2003.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
854.53 Кб
Скачать
  1. Триггеры и ограничения. События, условия и действия.

Триггеры, иногда называемые правилами типа событие-условие-действие (правилами ЕСА), отличаются от рассмотренных ранее ограничений ограничений удовлетворяли стандарту SQL/92 в трех аспектах:

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

  • Вместо немедленного предотвращения вызвавшего его события триггер проверяет заданное условие. Если оно не выполняется, в ответ на событие не выполняется никаких действий, связанных с триггером.

  • Если условие триггера выполняется, связанное с ним действие выполняется системой. Это действие состоит либо в предотвращении события, либо в отмене его результата (например, в удалении вставленного кортежа). Фактически таким действием может быть любая последовательность операций БД, возможно даже операций, никак не связанных с событием, вызвавшим срабатывание триггера.

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

  1. Действие можно выполнять до события, после или вместо события, вызвавшего срабатывание триггера.

  2. Действие может относиться как к старым, так и к новым значениям кортежей, которые были введены, удалены или изменены событием, вызвавшим срабатывание триггера.

  3. События обновления могут определять отдельный столбец или множество столбцов.

  4. Условие можно задать в пункте WHEN, и действие выполняется, если только при наступлении события, вызвавшего срабатывание триггера, срабатывает правило и выполняется данное условие.

  5. Программист может установить режим выполнения действия: (а) один раз для каждого изменяемого кортежа; (в) один раз для всех кортежей, изменяемых операцией на БД.

  1. Объявление и открытие курсора.

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

Оператор определения курсора имеет вид

  • DECLARE имя курсора [INSENSITIVE] [SCROLL] CURSOR

  • FOR {SELECT оператор

  • [предложение для обновления]}

  • | {подготовленный оператор}

  • предложение для обновления::=

  • FOR {READ ONLY | UPDATE [OF имя столбца.,..]}

Курсоры могут быть двух типов – «обновляемые» и «только для чтения». «Обновляемый курсор можно преобразовать в курсов типа «только для чтения» с помощью предложения для обновления, но не наоборот. Предложение для обновления может относиться к отдельным столбцам. В качестве предложения для обновления можно использовать только FOR UPDATE, если курсор обновляемый в принципе. Для того, чтобы быть обновляемым в принципе, курсор должен удовлетворять следующим условиям:

  • Нельзя объявлять курсор как INSESITIVE, SCROLL или с предложением ORDER BY.

  • Курсор должен базироваться на одной и только одной простой таблице. Другими словами нельзя использовать соединения таблиц.

  • Курсор должен содержать один и только один запрос, т.е. недопустимы предложения UNION, EXCEPT или INTERSECT.

  • Если простая основная таблица курсора является представлением, то это представление должно быть обновляемым.

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

  • Запрос не должен содержать предложения GROUP BY или HAVING.

  • Запрос не должен содержать предложения DISTINCT.

Чтобы подготовить курсор для дальнейшего использования, предварительно определенный с помощью оператора DECLARE CURSOR, используется оператор OPEN:

OPEN имя курсора [USING источник значений];

Источник значений::=

Список параметров

| {SQL DESCRIPTOR имя дескриптора}

При выполнении этого оператора все параметры и переменные заполняются их текущими значениями. Запрос, определяющий курсор, выполняется, и данные извлекаются. Эти данные теперь готовы для построчной обработки, осуществляемой оператором FETCH. Предложение USING используется только в динамическом SQL.

Оператор CLOSE имя курсора закрывает открытый в данный момент курсор.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]