gpt4 book ai didi

sql - "Error: ORA-04098: trigger ' CA0513.ITEMAVGRATINGTRIGGER ' is invalid and failed re-validation"

转载 作者:行者123 更新时间:2023-12-01 12:54:38 31 4
gpt4 key购买 nike

我正在创建触发器:

CREATE OR REPLACE TRIGGER ItemAvgRatingTrigger
AFTER INSERT OR UPDATE OF rating ON Collectionitems
REFERENCING NEW AS newRow
FOR EACH ROW
BEGIN
UPDATE Item
SET rating = (SELECT AVG(Collectionitems.rating) FROM Collectionitems, Item WHERE
Collectionitems.itemid = newRow.itemid AND newRow.itemid = Item.itemid)
WHERE Item.itemid = newRow.itemid;
END ItemAvgRatingTrigger;/

每当我通过更新 Collectionitems 中的一行来运行触发器时,我都会得到 squirrel 返回这个:

Error: ORA-04098: trigger 'CA0513.ITEMAVGRATINGTRIGGER' is invalid and failed re-validation

SQLState: 42000
ErrorCode: 4098
Position: 7

执行SQL语句:

SELECT * FROM User_Errors;

产生 1 个错误:

PLS-00103: Encountered the symbol "/" The symbol "/" was ignored./n

我已经阅读了很多其他人遇到同样问题的帖子,但还没有找到解决方案,有什么想法吗?

最佳答案

编译失败的真正原因是双重的。

  1. 您应该将新值引用为 :newrow
  2. 您确实需要在 / 之前回车和/或换行。

但是,这个触发器永远不会起作用。你最终会遇到一个变异表异常,ORA-04091:表名正在变异,触发器/函数可能看不到它。这是因为你引用了你正在更新的表在行级触发器中。简而言之,Oracle 确保数据的读取一致性 View 。

在触发器中,您正在更新 Collectionitems。同时从这个表中select,在同一个session中,有两种可能的状态;更新和未更新。为确保您的 View 是读取一致的,Oracle 会引发此错误。

在您的特定情况下,您可能需要考虑 materialized view而不是触发器。

进一步阅读:

关于sql - "Error: ORA-04098: trigger ' CA0513.ITEMAVGRATINGTRIGGER ' is invalid and failed re-validation",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10471647/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com