对于学校项目,我们不得不使用触发器来更新冗余信息。我们有一个名为'recipe_ratings'的表格,其中包含'评分'(数字0-100)。在我们的“食谱”表中,我们有一个称为“评分”的冗余行,其中包含该特定配方的平均评分。Oracle使用触发器计算平均值
我们试图创建一个Oracle触发器是这样的:
CREATE OR REPLACE TRIGGER trigger_rating
AFTER UPDATE
ON recipe_ratings
FOR EACH ROW
DECLARE
average_rating NUMBER;
BEGIN
SELECT ROUND(AVG(rating))
INTO average_rating
FROM recipe_ratings
WHERE rid = :new.rid;
UPDATE recipe SET rating = average_rating
WHERE rid = :new.rid
END;
但是,这给了我们:ORA-04091:表名称变异,触发/功能可能无法看到它。我们正在尝试'自主交易',但感觉就像我们正在从我们的触发中飘走。
我们该如何使这个触发器工作?
我希望这个学校项目的唯一理由是给你的经验知道,以避免像瘟疫这种冗余:) – 2011-05-04 01:03:24