История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Топ:
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Общий синтаксис описания триггерных процедур для схемы таков:
CREATE [ OR REPLACE ] TRIGGER имя _триггерной _процедуры
{ BEFORE | AFTER }
{ SERVERERROR | LOGON | LOGOFF | CREATE | DROP | ALTER }
ON имя _схемы. SCHEMA
BEGIN
Текст_на_PL/SQL
END;
С каждым событием из таблицы выше связано несколько атрибутов. Фактически эти атрибуты – системные функции, возвращающие при обращении к ним из тела процедуры некоторый результат. Ниже эти атрибуты перечисляются, причем первые шесть из них относятся к уровню базы данных (но могут использоваться в триггерных процедурах уровня схемы).
| Имя | Тип | Описание |
| SYSEVENT | VARCHAR2(30) | Имя события, активизировавшего триггерную процедуру |
| LOGIN_USER | VARCHAR2(30) | Имя пользователя, инициировавшего сеанс работы с Oracle |
| INSTANCE_NUM | NUMBER | Имя экземпляра СУБД |
| DATABASE_NAME | VARCHAR2(50) | Имя БД |
| SERVER_ERROR | NUMBER | Функция, возвращающая номер ошибки на указанном месте магазина ошибок. 1 соответствует верхушке магазина. Пример: SERVER_ERROR(2) выдаст номер ошибки на втором от верха месте в магазине. |
| IS_SERVERERROR | BOOLEAN | Функция, возвращающая TRUE при наличии указанной ошибке в текущем магазине ошибок; FALSE в противном случае. |
| DICTIONARY_OBJ_OWNER | VARCHAR2(30) | Владелец объекта из словаря-справочника, действие с которым привело к активизации триггерной процедуры. |
| DICTIONARY_OBJ_NAME | VARCHAR2(30) | Имя объекта из словаря-справочника, действие с которым привело к активизации триггерной процедуры |
| DICTIONARY_OBJ_TYPE | VARCHAR2(30) | Тип объекта из словаря-справочника, действие с которым привело к активизации триггерной процедуры |
| DES_ENCRYPTED_PASSWORD | VARCHAR2(30) | Зашифрованный (DES) пароль создаваемого или изменяемого пользователя. |
Вот какие правила и атрибуты свойственны каждому событию:
| Событие | Правило | Атрибуты |
| LOGON | Условие можно указать, воспользовавшись USERID() или USERNAME() | SYSEVENT LOGIN_USER INSTANCE_NUM DATABASE_NAME |
| LOGOFF | Условие можно указать, воспользовавшись USERID() или USERNAME() | SYSEVENT LOGIN_USER INSTANCE_NUM DATABASE_NAME |
| BEFORE CREATE AFTER CREATE | В пределах триггерной процедуры удалять создаваемый объект нельзя. Процедура выполняется в рамках текущей транзакции. | SYSEVENT LOGIN_USER INSTANCE_NUM DATABASE_NAME DICTIONARY_OBJ_TYPE DICTIONARY_OBJ_NAME DICTIONARY_OBJ_OWNER |
| BEFORE ALTER AFTER ALTER | В рамках процедуры удалять изменяемый объект нельзя. Процедура выполняется в рамках текущей транзакции. | SYSEVENT LOGIN_USER INSTANCE_NUM DATABASE_NAME DICTIONARY_OBJ_TYPE DICTIONARY_OBJ_NAME DICTIONARY_OBJ_OWNER |
| BEFORE DROP AFTER DROP | В рамках процедуры удалять изменяемый объект нельзя. Процедура выполняется в рамках текущей транзакции. | SYSEVENT LOGIN_USER INSTANCE_NUM DATABASE_NAME DICTIONARY_OBJ_TYPE DICTIONARY_OBJ_NAME DICTIONARY_OBJ_OWNER |
Общий синтаксис описания триггерной процедуры для БД таков:
CREATE [ OR REPLACE ] TRIGGER имя _триггера
{ BEFORE | AFTER }
{ SERVERERROR | LOGON | LOGOFF | STARTUP | SHUTDOWN }
ON DATABASE
BEGIN
Текст _на _PL/SQL
END;
С каждым событием из таблицы выше связано несколько атрибутов. Фактически эти атрибуты – системные функции, возвращающие при обращении к ним из тела процедуры некоторый результат. Ниже эти атрибуты перечисляются, причем первые шесть из них нам уже знакомы по триггерным процедурам событий уровня схемы.
| Имя | Тип | Описание |
| SYSEVENT | VARCHAR2(30) | Имя системного события, приведшего к запуску процедуры |
| LOGIN_USER | VARCHAR2(30) | Имя пользователя, вышедшего на сеанс работы с Oracle |
| INSTANCE_NUM | NUMBER | Имя экземпляра СУБД |
| DATABASE_NAME | VARCHAR2(50) | Имя БД |
| SERVER_ERROR | NUMBER | Функция, возвращающая номер ошибки на указанном месте магазина ошибок. 1 соответствует верхушке магазина. Пример: SERVER_ERROR(2) выдаст номер ошибки на втором от верха месте в магазине. |
| IS_SERVERERROR | BOOLEAN | Функция, возвращающая TRUE при наличии указанной ошибке в текущем магазине ошибок; FALSE в противном случае. |
Вот какие правила и атрибуты свойственны каждому событию:
| Событие | Правило | Атрибуты |
| SERVERERROR | По умолчанию процедура будет запускаться при всех событиях. Однако специальным указанием можно сообщить, чтобы процедура запускалась только при интересующих нас событиях. | SYSEVENT LOGIN_USER INSTANCE_NUM DATABASE_NAME SERVER_ERROR IS_SERVERERROR |
| LOGON | Условие можно указать, воспользовавшись USERID() или USERNAME() | SYSEVENT LOGIN_USER INSTANCE_NUM DATABASE_NAME |
| LOGOFF | Условие можно указать, воспользовавшись USERID() или USERNAME() | SYSEVENT LOGIN_USER INSTANCE_NUM DATABASE_NAME |
| STARTUP | В теле процедуры не допускается использование операций DML (в том числе SELECT). Можно, однако, запускать программы (например, listener), закреплять в SGA пакеты и т. д. | SYSEVENT LOGIN_USER INSTANCE_NUM DATABASE_NAME |
| SHUTDOWN | В теле процедуры не допускается использование операций DML (в том числе SELECT). Можно, однако, останавливать программы (например, listener), или запускать (например, сбора статистики работы СУБД и занесения ее в журнал) | SYSEVENT LOGIN_USER INSTANCE_NUM DATABASE_NAME |
При написании тела процедуры нужно учитывать следующие обстоятельства:
- При запуске триггерной процедуры для событий в СУБД Oracle открывает автономную транзакцию, осуществляет сам запуск и фиксирует (commit) выполнение всех DML-операций безотносительно к логике транзакций пользователя.
- В определении процедур для событий LOGON, STARTUP и SERVERERROR можно указывать только слово AFTER. Если указать BEFORE, при трансляции будет выдана ошибка.
- Аналогично, в определении триггерных процедур LOGOFF и SHUTDOWN можно указывать только BEFORE.
- Обращения из процедур DBMS_OUTPUT не дадут на экране никакой выдачи в пределах текущего сеанса. Для того, чтобы как-то записать информацию, нужно будет воспользоваться записью в таблицы, в файл ОС или пакетом DBMS_PIPE.
- Триггерная процедура для SERVERERROR не срабатывает на следующие пять событий: ORA-01403, ORA-01422, ORA 04030, ORA-01034 и ORA-01007.
Страница для заметок
|
|
|
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!