我想知道如果我在oracle數據庫正在使用時更換觸發器,是否會丟失任何數據。我創造了一個玩具的例子,似乎我不會,但我的一個同事聲稱不然。如果我在應用程序運行時替換Oracle觸發器,我會錯過任何更改嗎?
create table test_trigger (id number);
create table test_trigger_h (id number);
create sequence test_trigger_seq;
--/
create or replace trigger test_trigger_t after insert on test_trigger for each row
begin
insert into test_trigger_h (id) values (:new.id);
end;
/
--/
begin
for i in 1..100000 loop
insert into test_trigger (id) values (test_trigger_seq.nextval);
end loop;
end;
/
--/
begin
for i in 1..10000 loop
execute immediate 'create or replace trigger test_trigger_t after insert on test_trigger for each row begin insert into test_trigger_h (id) values (:new.id); end;';
end loop;
end;
/
ran the two loops at the same time
select count(1) from test_trigger;
COUNT(1)
100000
select count(1) from test_trigger_h;
COUNT(1)
100000
有趣。如果你分離了'drop'和'create'語句,我會希望事件被遺漏;但是如果您使用'create或replace',則不會如您所在。但我認爲我沒有看到這種行爲記錄。 –
假設任何DDL語句都是事務處理的連續屬性應該保留的含義提交...那就是你不應該錯過事件。但是,如果明確說明,這將會很有趣。 – Claude