学校のプロジェクトでは、冗長な情報を取得し、トリガーを使用して更新する必要があります。「評価」(0 ~ 100 の数字)を含む「recipe_ratings」というテーブルがあります。「レシピ」テーブルには、その特定のレシピの平均評価を含む「評価」と呼ばれる冗長な行があります。
次のような 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: table name is mutating, trigger/function may not see it. 「自律トランザクション」を実験していますが、トリガーから離れているように感じます。
このトリガーを機能させるにはどうすればよいでしょうか。