Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Топ:
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Имеющуюся триггерную процедуру можно «отключить» от события (чтобы она не запускалась автоматически) и снова «подключить» (чтобы запускалась):
ALTER TRIGGER имя _триггерной _процедуры {ENABLE | DISABLE};
Обобщенный вариант для DML-триггерных процедур, связанных с таблицей:
ALTER TABLE имя _таблицы {ENABLE | DISABLE} ALL TRIGGERS;
Замечание: обе эти команды – категории DDL, а значит изменение состояния триггерной процедуры для таблицы приведет к неявному выполнению COMMIT (!), так как иначе был бы возможен конфликт с ближайшей операцией ROLLBACK.
Список имеющихся в схеме триггерных процедур с их свойствами находится в таблице USER_TRIGGERS.
Триггерные процедуры для событий категории DML
Комбинированные триггерные процедуры
DML-триггерную процедуру можно связать одновременно с несколькими событиями. В теле такой процедуры удобно воспользоваться предикатами INSERTING, UPDATING и DELETING, конкретизирующими событие, вызвавшее срабатывание, например:
CREATE OR REPLACE TRIGGER emp_log_t
AFTER INSERT OR UPDATE ON emp
FOR EACH ROW
DECLARE
dmltype CHAR (1);
BEGIN
IF INSERTING THEN dmltype:= ‘I’;
ELSIF UPDATING THEN dmltype:= ‘U’;
END IF;
INSERT INTO emp_log (emp_no, who, operation) VALUES (:new.empno, USER, dmltype);
END;
/
Функция UPDATING допускает уточнение именем столбца, например:
IF UPDATING (comm) THEN …
В этом качестве она полезна и в простой процедуре для UPDATE, а не только в комбинированной.
Управление транзакциями в теле триггерной процедуры
Из тела триггерной процедуры для оператора DML запрещено выполнять команды COMMIT и ROLLBACK, прямо или через подпрограммы, если только в его объявлении не указана прагма автономной транзакции. При указании PRAGMA AUTONOMOUS_TRANSACTION эти команды в теле процедуры могут употребляться:
CREATE OR REPLACE TRIGGER before_department_update
BEFORE UPDATE ON dept
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
…
COMMIT;
…
ROLLBACK;
END;
/
Однако возможна и другая техника: объявить триггерную процедуру как обычно, но вставить в тело обращения к процедурам, странслированным для автономных транзакций.
Обращение к автономным транзакциям в триггерных процедурах позволяет программировать безоткатные операции в БД (например, запись в журнал), делать запросы и вносить правки в таблицу, к которой привязана эта процедура и решать другие задачи.
Последовательность срабатывания триггерных процедур, когда их несколько
Триггерные процедуры для изменяющих операторов DML могут быть «уровня строки» (строковыми) или уровня оператора (вызвавшего срабатывание; иногда еще говорят «уровня таблицы»). Также, они могут запускаться и до, и после выполнения оператора.
Триггерные процедуры (строковые) типа BEFORE могут устанавливать новые значения полям строки, но, в отличие от AFTER, требуют для этого дополнительного логического чтения, что отражается на их скорости выполнения.
Триггерные процедуры не могут создаваться для таблиц пользователя SYS.
Порядок срабатывания триггерных процедур для операторов DML:
1) Триггерные процедуры категории BEFORE уровня оператора
2) Для каждой строки, затронутой изменением:
Строковые процедуры категории BEFORE
Изменяющая операция DML
Строковые процедуры категории AFTER
3) Триггерные процедуры категории AFTER уровня оператора
Упражнение. Проделать пример:
CREATE OR REPLACE TRIGGER before_update_emp_1 BEFORE UPDATE ON emp
BEGIN DBMS_OUTPUT.PUT_LINE(‘Triggered before_update_emp_1’); END;
/
CREATE OR REPLACE TRIGGER before_update_emp_2 BEFORE UPDATE ON emp
BEGIN DBMS_OUTPUT.PUT_LINE(‘Triggered before_update_emp_2’); END;
/
CREATE OR REPLACE TRIGGER before_update_row_emp BEFORE UPDATE ON emp
FOR EACH ROW
BEGIN DBMS_OUTPUT.PUT_LINE(‘Triggered before_update_row_emp for ’||:old.ename); END;
/
CREATE OR REPLACE TRIGGER after_update_row_emp_1 AFTER UPDATE ON emp
FOR EACH ROW
BEGIN DBMS_OUTPUT.PUT_LINE(‘Triggered after_update_row_emp_1 for ’||:old.ename); END;
/
CREATE OR REPLACE TRIGGER after_update_row_emp_2 AFTER UPDATE ON emp
FOR EACH ROW
BEGIN DBMS_OUTPUT.PUT_LINE(‘Triggered after_update_row_emp_2 for ’||:old.ename); END;
/
CREATE OR REPLACE TRIGGER after_update_emp AFTER UPDATE ON emp
BEGIN DBMS_OUTPUT.PUT_LINE(‘Triggered after_update_emp’); END;
/
UPDATE emp SET sal = sal WHERE ename LIKE ‘S%’;
|
|
|
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
© cyberpedia.su 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!