Я работаю в системе, использующей БД Oracle.Инструмент ETL (ODI) установил следующий триггер в таблицу, чтобы включить сбор измененных данных (CDC).
create or replace trigger SCHEMA.T$TABLE_NAME
after insert or update or delete on SCHEMA.TABLE_NAME
for each row
declare
V_FLAG VARCHAR(1);
V_ROW_ID VARCHAR2(60);
begin
if updating then
V_ROW_ID := :new.ROW_ID;
V_FLAG := 'U';
end if;
if inserting then
V_ROW_ID := :new.ROW_ID;
V_FLAG := 'I';
end if;
if deleting then
V_ROW_ID := :old.ROW_ID;
V_FLAG := 'D';
end if;
insert into SCHEMA.J$TABLE_NAME
(
JRN_SUBSCRIBER,
JRN_CONSUMED,
JRN_FLAG,
JRN_DATE,
ROW_ID
)
select JRN_SUBSCRIBER,
'0',
V_FLAG,
sysdate,
V_ROW_ID
from SCHEMA.SNP_SUBSCRIBERS
where JRN_TNAME = 'SCHEMA.TABLE_NAME'
/* The following line can be uncommented for symetric replication */
/* and upper(USER) <> upper('SCHEMA') */
;
end;
Моя проблема в том, что эта вещь не распознает обновления.Например, когда я делаю очень простое обновление для одной строки, он все равно вставляет «I» в таблицу CDC, что означает, что он считал обновление как вставку.Что происходит?Это какая-то странная вещь оракула?Я нигде об этом не читал.
Заранее спасибо!