2016-10-29 5 views
0

STAFF가 동일한 UNIT에서 2 년 연속 가르치는 것을 허용하지 않는 트리거를 만드는 방법. 나는 그들이 사용해야하는 3 가지 속성이 있기 때문에 대문자를 사용했습니다. 나는 내가해야할 일을 알고 있지만 그것을 구현하는 방법을 모르겠다. 우리는 카운터를 사용하여 직원이 특정 UNIT를 가르치고있는 시간을 몇 년으로 계산할 수 있는지를 생각할 수 있었고, 그것이 2보다 많아지면 오류가 발생했지만 구현하는 데 어려움이 있습니다.SQL 트리거가 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 

3 개의 변수를 처리 할 때 'WHERE'부분에 무엇을 입력해야할지 모르겠습니다. 여기에 약간의 설명이 필요합니다.

미리 감사드립니다.

답변

0

지난 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를 수행합니다.

관련 문제