我想创建一个在ENROLLMENT表上插入之前触发的触发器,该触发器通过C_SEC_ID与COURSE_SECTION表相关。添加新注册时会触发触发器。在它可以插入记录之前,它会查看COURSE_SECTION表的MAX_ENRL和CURR_ENRL列并检查它,如果满足条件(即CURR_ENRL< MAX_ENRL),则插入完成,否则会触发错误。
这是我到目前为止所做的,但我不知道如何检查正确的C_SEC_ID。
CREATE OR REPLACE TRIGGER TRG_INCRE_ENRL_NUM
BEFORE INSERT ON ENROLLMENT
FOR EACH ROW
BEGIN
IF COURSE_SECTION.CURR_ENRL < COURSE_SECTION.MAX_ENRL THEN
COURSE_SECTION.CURR_ENRL := COURSE_SECTION.CURR_ENRL + 1;
ELSE RAISE_APPLICATION_ERROR(-20005, 'Failure in trigger TRG_INCR_ENRL_NUM:
Max Enrollment reached.');
END IF;
NULL;
END;
答案 0 :(得分:1)
使用案例并使用COURSE_SECTION
列,将选择查询中的比较与:NEW.c_sec_id
进行比较。如果条件为真,则UPDATE
表,否则引发错误。这假设您的 course_section 表格始终具有给定c_sec_id
的一个行,否则您可能需要处理no_data_found
或使用{{选择查询中的1}},MAX
。
MIN