我创建了以下表格:
create table lessons(
id number,
name_teacher varchar2(9),
name_student varchar2(40),
start_lesson date,
end_lesson date
);
我插入了以下数据:
insert into lessons values (001,'Peter','Thomas',to_date('2015-12-15','YYYY-MM-DD'),to_date('2015-12-22','YYYY-MM-DD'));
insert into lessons values (002,'Eli','Alice',to_date('2015-06-16','YYYY-MM-DD'),to_date('2015-06-23','YYYY-MM-DD'));
insert into lessons values (003,'Daniel','Thomas',to_date('2015-08-15','YYYY-MM-DD'),to_date('2015-08-20','YYYY-MM-DD'));
您无法通过触发器添加的数据。
insert into lessons values (001,'Peter','Alice',to_date('2015-12-16','YYYY-MM-DD'),to_date('2015-12-25','YYYY-MM-DD'));
insert into lessons values (002,'Eli','Thomas',to_date('2015-06-13','YYYY-MM-DD'),to_date('2015-06-20','YYYY-MM-DD'));
问题是如何制作一个不允许我添加具有时间重叠的教师的学生的触发器,例如“Peter”或“Eli”。
---我的问题---
Oracle向我返回了mutants表的错误。
答案 0 :(得分:1)
你是插入/更新之后的触发器在comlete插入或更新之后触发,而不是在earch行之后触发:
create or replace trigger check_intersections_trg
on
lessons
after insert or update
declare
v_res NUMBER;
begin
select count(*)
into v_res
from lessons l1
join lessons l2 on l1.name_student = l2.name_student
and l1.start_lesson <= l2.end_lesson
and l2.start_lesson <= l1.end_lesson
;
if v_res > 0 than
raise_application_error( -20999, 'intersection found');
end if;
end;
/