Компиляция триггера (REBUILD TRIGGER)
Функция
Определение оператора компиляции существующего в БД триггера. Необходимость в перекомпиляции триггера возникает в случае, если в теле триггера используются претранслированные запросы, а указанные в них таблицы были пересозданы или была изменена их структура.
Спецификация
<компиляция триггера>
::=REBUILD TRIGGER [имя схемы.]имя триггера
Синтаксические правила
-
<Имя триггера>должно ссылаться на существующий в БД триггер.
Общие правила
-
Команда доступна только владельцу триггера.
-
Для выполнения команды надо иметь привилегию
RESOURCE.
Пример
create or replace table test(ch char(10));
create or replace table test_audit(ch_new char(10), ch_old char(10), action char(10));
create or replace trigger test_trig before insert on test for each row execute for debug
code
if ( inserting ) then
execute "insert into test_audit values (?, '', 'inserting');" using new.ch; //
endif; //
return true; //
exceptions
when all then
return false;
end;
//проверка работы триггера
insert into test values('value 1');
select * from test;
select * from test_audit;
//удалим таблицу, используемую в претранслированном запросе
drop table test_audit;
insert into test values('value 2');
select * from test; // запись со значением 'value 2' отсутствует, так как в
триггере произошло исключение (отсутствует таблица test_audit) и в блоке
обработки исключений было возвращено значение false, отменяющее основную
операцию
select * from test_audit; // несуществующая таблица (test_audit)
//пересоздадим таблицу test_audit
create or replace table test2(ind int);
create or replace table test_audit(ch_new char(10), ch_old char(10), action char(10));
insert into test values('value 2');
select * from test; // запись со значением 'value 2' отсутствует, так как был пересоздан объект, используемый в претранслируемом запросе
select * from test_audit;
rebuild trigger test_trig; // пересоздадим триггер
insert into test values('value 2');
select * from test;// запись со значением 'value 2' добавлена
select * from test_audit;// запись со значением 'value 2' добавлена