首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL触发器,以便不超过2个连续

SQL触发器,以便不超过2个连续
EN

Stack Overflow用户
提问于 2016-10-29 08:01:51
回答 1查看 154关注 0票数 0

如何制作触发器,使员工不能连续在同一单元任教超过2年。我对这些使用了大写字母,因为它们是我需要使用的3个属性。我想我知道我应该做什么,但不确定如何实现它。我在想,如果我们可以使用计数器来计算一个员工已经教了多少年的某个单元,如果超过2,就会产生一个错误,但我还是坚持执行它。

代码语言:javascript
复制
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个变量。这里只需要一些澄清。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-10-30 14:57:05

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

代码语言:javascript
复制
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,则视图触发器本身将执行对表的插入操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40314708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档