我試圖創建一個觸發器,它可以將父表的值(在插入或更新後)聚合到父表中。 子表C
有字段id, year, month, value
,父母P
- id, year, value
。 當一個新行插入到C中或更新了現有行時,觸發器應累計該年的所有月份值,並將總和寫入P
中的相應行。 這裏是我是如何實現它:Oracle觸發器 - 從子表到父項
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
我不明白爲什麼,我並不想modifiy C
,只有P
。 謝謝!
可能出現[Oracle中的突變觸發器問題]的副本(http://stackoverflow.com/questions/12346591/mutating-trigger-issue-in-oracle) – APC