子テーブルの値を (挿入または更新後に) 親テーブルに集計するトリガーを作成しようとしています。子テーブル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
。ありがとうございました!