【问题标题】:SQL Trigger so that no more than 2 consecutiveSQL Trigger 使连续不超过 2 个
【发布时间】:2017-03-11 21:56:59
【问题描述】:

如何制作一个不允许员工在同一单元中连续教学超过 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 个变量。只是需要在这里澄清一下。

提前致谢。

【问题讨论】:

    标签: sql plsql triggers database-trigger


    【解决方案1】:

    您想知道该员工在过去两年中教了这门课程多少年。如果答案是 2,则不允许。

    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 年期间教职员工教授该课程的次数。也就是说,如果该课程在前两年都教授过,则结果将是两次。不幸的是,您可能会以抱怨变异表的异常结束。

    解决此问题的一种方法是在桌子前面放置一个视图,并让应用仅访问该视图。然后,您的触发器将是视图上的 而不是 触发器,因此不会遇到变异表问题。如果查询结果返回 0 或 1,则视图触发器本身将对表执行 INSERT。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 2016-10-24
      相关资源
      最近更新 更多