oraclepl/SQL中的触发器

oraclepl/SQL中的触发器,oracle,triggers,Oracle,Triggers,我正在尝试做一个触发器,在更新分数或插入新分数时更新所有学分的总和。那是我的桌子 create table Department ( Department_ID varchar(4) not null, Name varchar(25) unique, Department_Head_ID varchar(9), College_ID varchar(4), Cred

我正在尝试做一个触发器,在更新分数或插入新分数时更新所有学分的总和。那是我的桌子

create table Department (
             Department_ID varchar(4) not null,
             Name varchar(25) unique,
             Department_Head_ID varchar(9),
             College_ID varchar(4),
             Credits_To_Degree NUMBER(3),
             constraint pkDepartment primary key (Department_ID));

create table Enrollment (
            Student_ID varchar(9) not null,
            Course_ID varchar(5) not null,
            Registered_Date date,Grade NUMBER,
            Status varchar(4),constraint pkEnrollment primary key 
            (Student_ID, Course_ID)); 

create table Student (
            Student_ID varchar(9) not null, 
            First_Name varchar(25),
            Last_Name varchar(25), 
            Phone char(11), 
            Birth_Date date, 
            Street varchar(100), 
            Zip_Code char(5),
            Department varchar(4),
            Credits integer,
            Eligible char(4), constraint pkStudent primary key
            (Student_ID),constraint fkDeptId foreign key (Department)
            references  Department(Department_ID));

           ALTER TABLE Department ADD FOREIGN KEY (Department_Head_ID)  
           REFERENCES  Faculty(Faculty_Id) INITIALLY DEFERRED;
           ALTER TABLE Department ADD FOREIGN KEY(College_ID) REFERENCES   
           College(College_ID) INITIALLY DEFERRED;                   
触发因素:

   create or replace TRIGGER Credits
   after INSERT OR UPDATE 
   ON enrollment
   REFERENCING NEW AS New OLD AS Old
   FOR EACH ROW
   BEGIN
   UPDATE STUDENT 
   SET CREDITS=(SELECT SUM(c.CREDITS) FROM COURSE c,ENROLLMENT e 
   WHERE c.COURSE_ID = e.COURSE_ID 
   and e.STUDENT_ID = :new.student_id
   and e.GRADE>= 60 ) 
   WHERE STUDENT.STUDENT_ID=:new.student_id;
   END;  
触发器会编译,但当我更改a级的值时,会出现此错误

UPDATE "FELIX"."ENROLLMENT" SET GRADE = '60' WHERE ROWID = 'AAAGUSAABAAALKJAAF' AND ORA_ROWSCN = '3540016'
ORA-20003: An error has occurred while performing credits trigger
ORA-06512: at "FELIX.CREDITS", line 5
ORA-04088: error during execution of trigger 'FELIX.CREDITS'


One error saving changes to table "FELIX"."ENROLLMENT":
Row 6: ORA-20003: An error has occurred while performing credits trigger
ORA-06512: at "FELIX.CREDITS", line 5
ORA-04088: error during execution of trigger 'FELIX.CREDITS'
第5行是一个FOR EACH ROW命令 我发现问题出在:new.student\u id中。但是如何获取触发器触发的行的id呢。
提前感谢您的帮助。

将您所有的:新引用更改为:旧引用。看到我回答的变化了吗?我已经试过了。相同的错误。请尝试此操作,更改了连接。您的错误处理非常糟糕。您正在用常规错误消息替换详细错误消息。所有这些都使我们更难确定哪里出了问题。除非您打算将日志添加到触发器,否则最好将其全部删除。让Oracle提供的错误传播。如果您需要在某个点添加错误日志记录,它应该看起来像是
EXCEPTION WHEN OTHERS/*您的错误日志记录过程在这里*/RAISE;结束。永远不要用无意义的错误取代有意义的错误。