变异表的问题

时间:2009-11-12 12:59:34

标签: oracle select triggers

我想创建触发器,在插入某个表后将触发,让我们说用户。 在这个触发器中我想从表用户中选择一些记录,除了这个我插入到表中,但后来我收到有关变异表的错误。是否可以从此表中获取记录?

3 个答案:

答案 0 :(得分:8)

自治交易方法是一种解决方法,但没有解决其他一些基本问题。

此方法的主要问题是,当对表同时进行多次修改时,触发的触发器不会看到其他修改的结果。因此,从触发器代码中获得的结果可能不正确。

例如,如果您在“客户订单”表上有一个触发器,用于维护客户表中的“客户总订单”列,那么同时放置的两个订单就无法看到对方。他们每个人都试图更新“客户总订单”,总数不包括其他订单。

由于这个原因和其他原因,将触发器用于业务逻辑或维护其他表数据通常被认为是不好的做法。

答案 1 :(得分:4)

用Tom Kyke的话来解释:

  

当我遇到变异表错误时,我的逻辑中存在严重的致命缺陷。

这是一个非常复杂的问题。它有多种解决方案,但最好是改变你的逻辑,这样你就不会遇到这样的错误。

可以找到可能的解决方案here。在Ask Tom上有更多关于此的讨论,搜索它们并阅读它们。你将获得一些非常有价值的知识。

答案 2 :(得分:-5)

使触发器在自治事务(单独事务)中运行

create or replace trigger xxx
before .... on .....

declare
.....

pragma autonomous transaction;
begin
.....your code.....
end;

问候
ķ