我写了这个触发器
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
我看不出有什么问题..
有人可以帮助我并告诉我我做错了什么吗?感谢。
答案 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包含更多信息。