Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Топ:
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Интересное:
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Дисциплины:
2022-12-20 | 17 |
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.
Страница для заметок
|
|
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!