問題は次のとおりです。
特定のクラスの全体的な平均成績を 2.5 未満に下げる変更を受講関係に加えないようにするトリガーを作成します。注: このトリガーは、特定の学生の平均 GPA に対処することを意図したものではなく、特定のクラスに割り当てられたすべての成績の平均成績に対処する必要があります。
スキーマは次のとおりです。
Student-schema =(studentnum, name, standing, gpa, major)
Class-schema = (schedulenum, semester, department, classnum, days, time, place, enrollment)
Instructor-schema = (name, department, office)
Teaches-schema = (name, schedulenum, semester)
Taking-schema = (studentnum, schedulenum, semester, grade)
私はこれらのトリガーでひどい時間を過ごしていますが、これを機能させるための私の試みは次のとおりです。
CREATE OR REPLACE TRIGGER stopChange
AFTER UPDATE OR INSERT OR DELETE ON taking
REFERENCING OLD AS old
NEW AS new
FOR EACH ROW
DECLARE
grd_avg taking.grade%TYPE;
BEGIN
SELECT AVG(grade)
INTO grd_avg
FROM taking
WHERE studentnum = :new.studentnum
AND schedulenum = :new.schedulenum
AND semester = :new.semester;
IF grd_avg < 2.5 THEN
UPDATE taking
SET grade = :old.grade
WHERE studentnum = :old.studentnum
AND schedulenum = :old.schedulenum
AND semester = :old.semester;
END IF;
END;
/
タプルを更新または削除しようとすると、エラーが発生するため、明らかに何か間違っています。
ERROR at line 1:
ORA-04091: table TAKING is mutating, trigger/function may not see it
ORA-06512: at "STOPCHANGE", line 6
ORA-04088: error during execution of trigger 'STOPCHANGE'
何かアドバイス?オラクルを使用しています。