Доступные версии документации

Компиляция триггера

Функция

Определение оператора компиляции существующего в БД триггера. Необходимость в перекомпиляции триггера возникает в случае, если в теле триггера используются претранслированные запросы, а указанные в них таблицы были пересозданы или была изменена их структура.

Спецификация
   
<компиляция триггера>::=
Синтаксические правила
  1. <Имя триггера> должно ссылаться на существующий в БД триггер.

Общие правила
  1. Команда доступна только владельцу триггера.

  2. Для выполнения команды надо иметь привилегию 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' добавлена
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter