我正在上班的项目,我们必须制作一个触发器,当学生有5个或更多缺席时,不允许学生报名参加辅导预约。它编译时没有错误,但是当我插入违反约束的记录时,我无法触发它。如果有人能够指出我出错的地方或者指出了我正确的方向,我会非常感激,我已经将头撞在墙上一段时间了。
CREATE OR REPLACE TRIGGER absence_violation
BEFORE INSERT ON appointment FOR EACH ROW
DECLARE
absences NUMBER(1);
BEGIN
SELECT COUNT(app_attendance)
INTO absences
FROM appointment
WHERE app_attendance = 'N'
AND stu_id = :new.stu_id;
IF absences >= 5 THEN
dbms_output.put_line('ERROR 223, Student Exceeds Absence Violations');
END IF;
END;
答案 0 :(得分:1)
尝试在代码中使用RAISE_APPLICATION_ERROR
代替DBMS_OUTPUT.PUT_LINE
。
CREATE OR REPLACE TRIGGER ABSENCE_VIOLATION
BEFORE INSERT ON APPOINTMENT
FOR EACH ROW
DECLARE Absences NUMBER (1);
BEGIN
Select COUNT(app_attendance) INTO Absences
FROM appointment
WHERE app_attendance = 'N' AND Stu_ID = :NEW.Stu_ID;
IF Absences >= 5 THEN RAISE_APPLICATION_ERROR(223, 'Student Exceeds Absence Violations');
END IF;
END;