триггер оракула не распознает вставку - PullRequest
1 голос
/ 12 октября 2010

Я работаю в системе, использующей БД 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, что означает, что он считал обновление как вставку.Что происходит?Это какая-то странная вещь оракула?Я нигде об этом не читал.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 12 октября 2010

Ну, я просто ограничил запуск триггера только на вставках.Это сработало для моих целей.

0 голосов
/ 12 октября 2010

Попробуйте удалить «для каждой строки», и это должно сработать.

У меня была такая же проблема, как и раньше

РЕДАКТИРОВАТЬ: извините, я плохо прочитал ваш триггер .. он не будет работатьбольше без EACH ROW

См. мой связанный вопрос: Как предотвратить запуск триггера вставки, когда строка не вставлена?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...