Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Топ:
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Дисциплины:
|
из
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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!