如何制作触发器,使员工不能连续在同一单元任教超过2年。我对这些使用了大写字母,因为它们是我需要使用的3个属性。我想我知道我应该做什么,但不确定如何实现它。我在想,如果我们可以使用计数器来计算一个员工已经教了多少年的某个单元,如果超过2,就会产生一个错误,但我还是坚持执行它。
CREATE TRIGGER CONSECUTIVE_TEACHING
BEFORE INSERT ON TEACHING_INFORMATION
FOR EACH ROW
DECLARE
s_id char;
c_id char;
t_yr number;
BEGIN
SELECT COUNT (TEACHING_INFORMATION.STAFFID, TEACHING_INFORMATION.COURSEID,
TEACHING_INFORMATION.YEAR)
INTO
s_id, c_id, t_yr
FROM TEACHING_INFORMATION
WHERE 我不确定在“WHERE”部分输入什么,因为我在这里处理3个变量。这里只需要一些澄清。
提前谢谢。
发布于 2016-10-30 14:57:05
您想知道该员工在过去两年中教了多少年这门课程。如果答案是两个,就不允许。
select count(*)
from TEACHING_INFORMATION
into t_yr
where STAFFID = :new.STAFFID
and COURSEID = :new.COURSEID
and YEAR between :new.YEAR - 2 and :new.YEAR - 1;因此,如果年份是2016年,它将计算员工在2014至2015年间教授这门课程的次数。也就是说,如果该课程在前两年都教授,结果将是两年。不幸的是,你最终可能会遇到一个异常,抱怨一个变异表。
一种方法是在桌子前面放一个视图,让应用程序只访问视图。您的触发器将是视图上的instead of触发器,因此不会遇到变量表问题。如果查询结果返回0或1,则视图触发器本身将执行对表的插入操作。
https://stackoverflow.com/questions/40314708
复制相似问题