我在我们的一个 Firebird 存储过程中遇到了性能下降,我不知道为什么。我在提到的 SP 中找到了以下代码:
declare v_dummy integer;
...
in autonomous transaction do
begin
-- insert may fail, but that is not a problem because it means the record is already there
insert into my_table(my_field) values (:input_param);
when ANY do
v_dummy = 1;
end
我在状态为 3 的表中看到几十条记录,RDB$TRANSACTIONS
在 MON$TRANSACTIONS 表中没有相关记录。
问题是,如果插入失败,自治事务会被回滚,还是“当任何时候”阻止回滚并且会有一个打开的事务?我可以只删除异常处理,因此它会自动回滚而不引发异常并阻塞其余代码吗?