【发布时间】:2013-02-13 14:13:21
【问题描述】:
我想在表 (CMS_CONTENT_ENROLLMENT) 上插入或更新,然后对同一个表进行计数并将结果更新到另一个表中。遗憾的是,我收到了 ORA-04091:表名正在发生变化,触发器/函数可能看不到它
CREATE OR REPLACE TRIGGER CMS_CONTENT_ENROLLMENT_CNT_TR
AFTER INSERT OR UPDATE
ON CMS_CONTENT_ENROLLMENT
FOR EACH ROW
DECLARE
BEGIN
UPDATE CMS_CONTENT CNT
SET CNT.REGISTRATIONCOUNT =
(
SELECT COUNT (ENROLLMENTID)
FROM CMS_CONTENT_ENROLLMENT
WHERE DELETED = 0 AND CONTENTID = CNT.CONTENTID
)
WHERE CNT.CONTENTID = :NEW.CONTENTID;
END;
/
【问题讨论】:
-
为什么需要在 CMS_CONTENT 中维护这个计数,因为您可以随时查询 CMS_CONTENT_ENROLLMENT?无论如何,您已经对这两者进行了规范化,但随后转身想要将片段(同时)非规范化为 cms_content。 KISS 并根据需要查询,请勿尝试维护此计数器 imo。