所有行中的触发条件

时间:2012-02-26 18:08:45

标签: oracle triggers

我正在尝试实施交通精细控制系统。当在表OBSERVACION中引入雷达观测时,触发器应该检查是否有一行在同一辆车上观察,然后计算罚款成本。

我想要一个触发器来检查表的每一行中的条件语句。我的意思是,我希望触发器条件检查表中的所有值,并查找其中一个值是否等于引入的NEW值。像这样:

WHEN(NEW.fecha_foto = fecha_foto)AND...

其中fecha_foto是表格中的任何值。

有可能吗?

感谢。

1 个答案:

答案 0 :(得分:1)

对拥有触发器的同一个表发出DML(包括SELECT)的触发器引发了ORA-4091的幽灵,即变异表异常。 Oracle抛出这个错误是因为它期望事务的结果是确定性的,并且在自己的表上发布DML的触发器会给程序带来不确定性。

变异表是糟糕设计的可靠指标,特别是糟糕的数据模型,这似乎就是这种情况。

如果罚款的价值取决于单次观察的结果,那么FINE可以成为OBSERVACION表上的一列。但是,您的业务规则表明,如果值落在某个时间段内,则该值可能取决于若干观察值。在这种情况下,罚款应该在自己的表中。您需要在OBSERVACION和MULTA之间使用外键来指示特定罚款涵盖哪些观察结果。