我想創建一個平均評級電影的觸發器。我試圖創建一個觸發器,但是當我添加新的評分資料時,我從觸發器中收到錯誤
ORA-04091: 表 RATING 正在發生變化,觸發器/函式可能看不到它
我已經搜索了該問題的解決方案,因為select在觸發器中使用。但是我不知道我應該如何更改我的代碼,這種情況有什么解決方案嗎?
CREATE OR REPLACE TRIGGER AvgRate_trig
AFTER INSERT ON Rating
FOR EACH ROW
BEGIN
UPDATE TB_MOVIES
SET AvgRating = (SELECT AVG(RATE) FROM RATING
WHERE tb_movies.movieid = rating.movieid)
WHERE movieid = new.movieid;
END
uj5u.com熱心網友回復:
您可以更喜歡使用陳述句級觸發器而不是行級觸發器,首先洗掉該行FOR EACH ROW以獲得新的觸發器主體,例如
CREATE OR REPLACE TRIGGER AvgRate_trig
AFTER INSERT ON rating
BEGIN
UPDATE tb_movies t
SET AvgRating =
(SELECT AVG(rate)
FROM rating r
WHERE t.movieid = r.movieid)
WHERE movieid IN
(SELECT movieid
FROM rating
GROUP BY movieid)
END;
/
這樣你就不會得到 tabe 變異錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/392588.html
