子テーブルの値を (挿入または更新後に) 親テーブルに集計するトリガーを作成しようとしています。子テーブルCにはフィールドid, year, month, valueがあり、親にPはid, year, value. 新しい行が C に挿入されるか、既存の行が更新されると、トリガーはその年のすべての月の値を合計し、その合計を の対応する行に書き込む必要がありPます。これが私がそれを実装した方法です:
CREATE OR REPLACE
TRIGGER tr__aggregation
AFTER INSERT OR UPDATE ON C
FOR each row
DECLARE
BEGIN
MERGE INTO P o
USING (SELECT id, year, sum(value) as val
FROM C
WHERE id = :NEW.id
AND year = :NEW.year
GROUP BY id, year) n
ON (n.id = o.id AND n.year = o.year)
WHEN NOT MATCHED THEN INSERT (o.id, o.year, o.value)
VALUES (n.id, n.year, n.value)
WHEN MATCHED THEN UPDATE SET o.value = NVL(n.value, o.value);
EXCEPTION WHEN OTHERS THEN
pck_util.pr_exception_info(TRUE);
RAISE;
END;
何らかの理由で、このエラーが発生します:
SQL Error: ORA-04091: table C is mutating, trigger/function may not see it
理由がわかりません。変更しようとしているわけではありませCんP。ありがとうございました!