Sql触发器使用Next_Day函数

时间:2013-04-26 00:28:44

标签: sql oracle triggers

我正在尝试创建一个触发器,用于检查教师是否在每次创建新记录时累积了特定周的15小时辅导。桌子上的每条记录等于一小时。特定导师的15个记录意味着15个小时。我可以让它计算导师的所有记录,但它应该根据插入函数插入的日期计算一周内的记录。

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;

提前感谢任何能够解决问题的人。

2 个答案:

答案 0 :(得分:0)

您可以将to_char与各种格式模型一起使用,将日期转换为年份和星期以及许多其他选项。

SELECT to_char(CURRENT_DATE,'YYYY IW') FROM DUAL

要更改一周的开头,您可以在转化前添加天数:

SELECT to_char(CURRENT_DATE + INTERVAL '2' DAY,'YYYY IW') FROM DUAL

答案 1 :(得分:0)

以为我会分享最终的代码。完美的工作! (谢谢Brian!)

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 WorkWeek = (Select to_char(:new.MeetDate, 'YYYY IW') From Dual);
DBMS_OUTPUT.PUT_LINE(HoursWorked);
if (HoursWorked + 1) > 15 then
Raise_application_Error(-20002, 'exceeded no of hours');
end if;
end;
/
show error;