Атрибуты триггерных процедур уровня схемы БД и событий в СУБД — КиберПедия 

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Атрибуты триггерных процедур уровня схемы БД и событий в СУБД

2022-12-20 17
Атрибуты триггерных процедур уровня схемы БД и событий в СУБД 0.00 из 5.00 0 оценок
Заказать работу

Общий синтаксис описания триггерных процедур для схемы таков:

 

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.

 

 

Страница для заметок

 

 


Поделиться с друзьями:

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

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.011 с.