Почему бы не создать триггер до обновления? Вставки в tableB будут фиксироваться только в случае фиксации всей транзакции.
РЕДАКТИРОВАТЬ: если вы хотите обновления в таблице B, попробуйте это:
--drop table testtab_a;
create table testtab_a
(
col1 varchar2(10) primary key,
col2 varchar2(10)
);
--drop table testtab_b;
create table testtab_b
(
col1 varchar2(10) primary key,
col2 varchar2(10)
);
insert into testtab_a values ('A', 'B');
insert into testtab_a values ('X', 'B');
insert into testtab_a values ('Z', 'C');
insert into testtab_b values ('A', 'B');
insert into testtab_b values ('X', 'B');
insert into testtab_b values ('Z', 'C');
CREATE OR REPLACE TRIGGER testtab_tr
BEFORE UPDATE
ON testtab_a REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
update testtab_b
set col1 = :new.col1,
col2 = :new.col2
where col1 = :old.col1;
end;
select * from testtab_a;
select * from testtab_b;
update testtab_a set col2 = 'H' where col1 = 'A';
EDIT2: если вам нужно перейти по схемам, вы можете использовать ссылку dblink.
Использование внутри триггера:
update testtab_b@someSchema
set col1 = :new.col1,
col2 = :new.col2
where col1 = :old.col1;
Убедитесь, что администраторы баз данных правильно настроили ваши обновления, а также любые синонимы, которые вам могут понадобиться (в зависимости от вашей среды).
Наконец, если вы пытаетесь сохранить эти 2 таблицы в «синхронизации», не забывайте о вставках и удалениях (которые также могут быть обработаны с помощью аналогичного триггера).
Это НЕ ответ на репликацию, однако, и этот подход должен использоваться очень экономно.