错误触发:表正在变异,触发/功能可能看不到它

时间:2016-10-29 14:18:00

标签: sql oracle triggers

我写了这个触发器

yourSingleObservable.concat(Observable.just(defaultValue)).take(1)

编译没问题,但是当我在DIFFUSION中插入一些值时,我有以下错误:

OASISFormat: 0.4
Name:        PongBattleServer
Version:     0.1.0
Synopsis:    Server for handling multi-player pong games
Authors:     Jason Miesionczek
License:     MIT
Plugins:     META (0.4), DevFiles (0.4)
Executable pongserver
  Path:       src
  BuildTools: ocamlbuild
  MainIs:     main.ml

我看不出有什么问题..

有人可以帮助我并告诉我我做错了什么吗?感谢。

3 个答案:

答案 0 :(得分:1)

问题是您正在引用触发器本身中正在更新的表。 Oracle感到困惑。而且,如果你认真考虑这一点,你可能也会感到困惑。

幸运的是,在这种情况下,我认为您不需要引用该表。相反,只需在update上使用逻辑:

CREATE OR REPLACE TRIGGER update_expirationDate
AFTER INSERT ON DIFFUSION FOR EACH ROW
BEGIN
    UPDATE EPISODE
        SET expirationDate = :NEW.diffusionDate + 14
        WHERE idEpisode = :NEW.idEpisode AND
              expirationDate < :NEW.diffusionDate + 14;
END;

也就是说,只有在值发生变化时才更新expirationDate。如果对每个插入执行此操作,则它将始终为最大值。

答案 1 :(得分:0)

请勿在另一个查询中使用触发器的同一表,否则会导致冗余。

答案 2 :(得分:0)

使用复合触发器,可以解决您的问题。

This article包含更多信息。