Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на PLSQL. Учебно-методическое пособие по дисциплине Базы данных

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
802 Кб
Скачать

Распространение исключений в вызывающую среду

Вместо перехвата исключений в блоке PL/SQL можно передавать их на обработку в вызывающую среду. Каждая вызывающая среда имеет свои средства показа ошибок и доступа к данным о них.

Вызывающая среда

Средства обработки исключений

 

 

SQL* Plus

Выдает на экран номер необработанного

 

исключения и сообщение

Procedure Builder

Выдает на экран номер необработанного

 

исключения и сообщение

Developer/2000 Forms

Обеспечивает доступ к номеру

 

необработанного исключения и

 

сообщению в триггере с помощью

 

функций ERROR_CODE и ERROR_ТЕХТ

 

из стандартного пакета

Приложение, использующее

Обеспечивает доступ к номеру

прекомпилятор

необработанного исключения через

 

структуру данных SQLCA

Внешний блок PL/SQL

Необработанные исключения могут быть

 

перехвачены обработчиком исключений

 

внешнего блока

Распространение исключения в вызывающую среду

Распространение исключений в подблоке

Если подблок обрабатывает исключение, он завершается нормально, и выполнение продолжается во внешнем блоке сразу после предложения END подблока.

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

21

Если исключение распространяется во внешний блок, оставшиеся исполняемые операторы в этом блоке пропускаются.

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

Перехват исключения внутри блока

Триггеры базы данных

Триггер базы данных - это хранимый именованный блок, который связан с именованной таблицей или представлением в базе данных и хранится на сервере базы данных. Триггер выполняется лишь в том случае, когда определенное событие модифицирует данные в таблице или представлении, связанном с ним.

Триггер выполняется неявно, всякий раз, когда происходит событие, запускающее этот триггер. Использование аргументов не допускается. Запускается триггер операцией DML (INSERT, UPDATE, DELETЕ), выполняемой над базой данных.

Триггеры можно использовать для:

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

слежения за информацией, хранимой в таблице, путем записи вносимых изменений и пользователей, вносящих эти изменения;

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

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

22

Синтаксис

CREATE [OR REPLACE] TRIGGER имя_триггера {BEFORE |AFTER | INSTEAD OF}

{DELETE | INSERT | UPDATE |OF столбец [, столбец ….]]}…

ON {таблица | представление}

[REFERENCING {OLD [AS] имя_старой_строки |NEW [AS]

имя_новой_строки }

FOR EACH {ROW | STATEMENT}] [WHEN(условие)]

анонимный_блок;

При создании триггера разработчик указывает, когда он сработает. Для этого он решает:

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

должен ли триггер выполняться до - BEFORE - или после - AFTER - модификации данных.

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

Триггер уровня оператора можно сконфигурировать для срабатывания до или после модификации данных.

Триггер INSTEAD OF является специальным видом триггера, связанным с представлениями;

операторы DML (DELETE, INSERT, UPDATE) должны вызывать выполнение триггера;

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

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

применения более чем одного типа операторов DML;

DELETING, INSERTING, UPDATING - возвращают TRUE, если триггер был запущен соответствующим оператором.

При создании триггера он включается автоматически.

Триггер можно создавать на рабочей станции, а затем разместить

на сервере.

23

Любой оператор, выполнение которого разрешено в блоке PL/SQL, можно выполнить и в теле триггера при условии соблюдения следующих ограничений.

1.В триггере нельзя задавать ни один из операторов управления транзакциями COMMIT, ROLLBACK или SAVEPOINT.

2.В теле триггера нельзя объявлять переменные с типами LONG и LONG RAW.

3.Триггеры можно удалить.

Синтаксис

DROP TRIGGER имя_триггера; где:

имя_триггера идентификатор созданного ранее триггера.

4. Триггеры можно, не удаляя, запретить использовать. Когда он запрещен, то находится в словаре данных, но не активизируется.

Синтаксис

ALTER TRIGGER имя_триггера {DISABLE | ENABLE}; где:

имя_триггера идентификатор созданного ранее триггера; DISABLE запрешает выполняться, т.е. отключен;

ENABLE включен и будет срабатывать на соответствующее событие по умолчанию.

5.Статус триггера можно проверить в словаре данных в служебной таблице ALL_TRIGGERS.

SQL>SELECT status FROM ALL_TRIGGERS

WHERE trigger_name=’ИМЯ_ТРИГГЕРА’;

Список литературы

1.Урман С. ORACLE9i. Язык программирования PL/SQL, 2004. - М.: «Лори», 544 с.

2.Урман Скотт и др. ORACLE Database 10g. Программирование на языке PL/SQL, 2006. - М.: «Лори», 630 с.

3.Кайт Томас. Oracle: Эффективное проектирование приложений, 2006. - М.: «Лори», 800 с.

4.http://www.firststeps.ru/sql/oracle/

5.http://adm-lib.ru/books/1/Oracle_8_Yazik_prog.pdf

Подписано в печать 16.05.2016г. Формат 60х90 1/16. Объём 1,5 усл.п.л. Тираж 75 экз. Изд. № 37. Заказ 83.

ООО «Брис-М». Москва, ул. Авиамоторная, д. 8а.

24

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