새 레코드가 만들어 질 때마다 교사가 특정 주 동안 15 시간의 개인 학습을 누적했는지 확인하는 방아쇠를 만들려고합니다. 테이블의 각 레코드는 1 시간과 같습니다. 특정 교사를위한 15 건의 기록은 15 시간을 의미합니다. 교사를위한 모든 기록을 세는 데 사용할 수는 있지만 삽입 기능을 사용하여 삽입 한 날짜를 기준으로 일주일 내에 기록을 계산해야합니다.Sql 트리거 Next_Day 함수를 사용하여
Create or replace Trigger Tutor_15hr_Rule
Before Insert on Meeting
For each row
Declare
HoursWorked binary_integer;
begin
select count(TutID)
into HoursWorked
from Meeting
where TutID = :new.TutID AND MeetDate Next_Day (:new.MeetDate, 'Saturday');
DBMS_OUTPUT.PUT_LINE(HoursWorked);
if (HoursWorked + 1) > 15 then
Raise_application_Error(-20002, 'exceeded no of hours');
end if;
end;
/
show error;
약간의 빛을 비출 수있는 사람에게 미리 감사드립니다.
응답 주셔서 감사합니다. 내 테이블에 'WorkWeek'속성을 추가하여 MeetDate 값을 기준으로 레코드가 속한 작업 주를 추적 한 다음 트리거에서 where 절에 대해 다음 코드를 시도했지만 지금은 오류가 발생합니다. 테이블에 데이터를 삽입하십시오. 여기서 내가 뭘 잘못하고 있니? 코드 : TutID = : new.TutID AND WorkWeek = (to_char (MeetDate, 'YYYY IW')를 선택하십시오. 여기서 MeetDate = : new.MeetDate); 오류 : 행 1의 오류 : ORA-01427 : 단일 행 부질의가 두 개 이상의 행을 반환합니다. –
알아냅니다. 듀얼이 내가 사용할 수있는 기본 테이블이라는 것을 알지 못했습니다. 다시 한 번 감사드립니다! –