Я делаю операцию вставки и удаления в таблице в одной транзакции. У меня есть триггер в этой таблице, который обновляет журнал. В журнале есть первичный ключ как sequenceId, который всегда получает увеличивается при вставке. Сначала я удаляю, а затем вставляю в транзакцию.Разная временная метка для разных запросов DML в одной транзакции в оракуле
У меня есть два вопроса:
- Отметка времени в журнале для вставки и удаления в настоящее время то же самое. Могу ли я заставить его быть другим.
- Порядок работы (вставка/удаление) в журнале меняется на обратный. Он показывает операцию удаления после операции вставки (в соответствии с sequenceId). Как я могу гарантировать, что порядок согласован в журнале (вставить после удаления).
Пример:
create table address (ID number, COUNTRY char(2));
create table address_log(SEQ_ID number, ID number, COUNTRY char(2), DML_TYPE char(1), CHANGE_DATE timestamp(6));
create sequence seq_id start with 1 increment by 100 nominvalue nomaxvalue cache 20 noorder;
create or replace trigger trg_add
before insert or delete on address
FOR EACH ROW
BEGIN
if inserting then
insert into address_log values(SEQ_ID.nextval, :new.ID, :new.COUNTRY, 'I', sysdate);
else
insert into address_log values(SEQ_ID.nextval, :old.ID, :old.COUNTRY, 'D', sysdate);
end if;
end;
insert into address values(1,'US');
insert into address values(2,'CA');
delete from address where id = 1;
insert into address values(3,'UK');
delete from address where id = 3;
, если я совершить последние DML запросов в одной транзакции, то я должен видеть тот же порядок в address_log.
@ wolφi Я использую первичный ключ sequenceId журнала, чтобы определить его. Он всегда получает incremented.Also обновленный вопрос. – rajsekhar
Спасибо за примеры кода. Итак, оба вопроса были решены с помощью ответа Винсента, не так ли? (Подсказка: если вы его примете, то и Винсент, и вы получите несколько очков ...) –