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 or replace'を使用している場合はそうではありません。しかし、私はその行動が文書化されているのを見たとは思わない。 –
DDL文がトランザクション処理の順次プロパティより暗黙のコミットであると仮定すると、イベントを逃すべきではありません。しかし、これが指定されていれば面白いでしょう。 – Claude