Я использую ORACLE 12c.
На столе у меня 2 триггера, оба "до обновления". Один из триггеров срабатывает при обновлении столбца, и внутри этого триггера другой столбец получает новое значение. Второй триггер должен срабатывать при обновлении этого второго столбца. Но он этого не сделал.
create table TRIGGER_TEST
(
col1 varchar2(64),
col2 varchar2(64),
col3 varchar2(64)
);
create or replace trigger TR_TRIGGER_TEST_1
before update of COL1 on TRIGGER_TEST
for each row
begin
dbms_output.put_line('here we are in TR_TRIGGER_TEST_1');
:new.col2 := 'only testing';
end;
/
create or replace trigger TR_TRIGGER_TEST_2
before update of COL2 on TRIGGER_TEST
for each row
begin
dbms_output.put_line('here we are in TR_TRIGGER_TEST_2');
:new.col3 := 'trigger_test_2 has fired';
end;
/
insert into TRIGGER_TEST values ('1_col1','1_col2','1_col3');
select * from TRIGGER_TEST;
COL1 COL2 COL3
----------------------------------------------------------------
1_col1 1_col2 1_col3
После того, как я вставил строку, я выполняю ОБНОВЛЕНИЕ. И я ожидаю, что COL1 = «теперь посмотрим», COL2 = «только тестирование» и COL3 = «триггер_тест_2 сработал».
update TRIGGER_TEST set COL1 = 'now we will see';
Но я получаю следующее:
select * from TRIGGER_TEST;
COL1 COL2 COL3
----------------------------------------------------------------
now we will see only testing 1_col3
Кто-нибудь может мне это объяснить? Я действительно уверен, что с предыдущими версиями ORACLE этот сценарий сработал. Но теперь это не так.