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;结束代码>。永远不要用无意义的错误取代有意义的错误。