【发布时间】:2020-11-08 09:18:17
【问题描述】:
我对 Oracle SQL(特别是 Oracle 11g SQL)还是很陌生。我正在尝试编写触发器,但似乎无法解决所有错误。目前,当我尝试执行下面列出的 SQL 时,出现此错误:
Error at line 12: PL/SQL: ORA-00923: FROM keyword not found where expected
1. CREATE OR REPLACE TRIGGER course_assignment_trigger
2. AFTER INSERT ON Assign FOR EACH ROW
3. DECLARE
这是我的 SQL:
CREATE OR REPLACE TRIGGER course_assignment_trigger
AFTER INSERT ON Assign FOR EACH ROW
DECLARE
tooManyCourses EXCEPTION;
notQualified EXCEPTION;
assignedBeforeQualified EXCEPTION;
assignedCourseCount int;
qualifiedRowCount int;
PRAGMA EXCEPTION_INIT( tooManyCourses, -20001 );
PRAGMA EXCEPTION_INIT( notQualified, -20001 );
PRAGMA EXCEPTION_INIT( assignedBeforeQualified, -20001 );
BEGIN
SELECT assignedCourseCount = COUNT(*) FROM Assign where Fid = :new.Fid;
IF assignedCourseCount >= 3
THEN
RAISE tooManyCourses;
END IF;
SELECT qualifiedRowCount = COUNT(*) FROM Qualify where Fid = :new.Fid and Cid = :new.Cid;
IF qualifiedRowCount = 0
THEN
RAISE notQualified;
END IF;
IF(:new.assignDate < (select qualifyDate from Qualify where Fid = :new.Fid and Cid = :new.Cid))
THEN
RAISE unacceptedDateOfQualification;
END IF;
EXCEPTION
WHEN tooManyCourses THEN
DBMS_OUTPUT.PUT_LINE('Cannot assign faculty to more than 3 courses.');
WHEN notQualified THEN
DBMS_OUTPUT.PUT_LINE('Faculty is not qualified to teach the course.');
WHEN assignedBeforeQualified THEN
DBMS_OUTPUT.PUT_LINE('Date of qualification must be before date of assignment.');
END;
【问题讨论】: