任务:编写触发器以检查是否将时间表添加到已存在的事件中, 而且该房间没有为新时间表占用。如果设置正确,则允许插入。否则,您将有权 并且将向用户显示错误消息。触发器的名称为 TRIGF1()的触发功能。
不幸的是,我每次看到的唯一例外是关于房间被占用的第二个例外。第一个完全不起作用(检查表中是否已存在事件的情况(允许添加该事件) 逻辑上的问题是什么?非常感谢您的支持。
CREATE OR REPLACE FUNCTION trigf1() RETURNS TRIGGER AS $schedule_trigger$
BEGIN
IF (NOT((new.eid = (select reid from revent where new.eid = reid)) or (new.eid = (select seid from sevent where new.eid = seid))))
THEN raise exception 'ERROR! event id number % does not exist in table revent and not in sevent', new.eid;
ELSIF (exists
(select tsrange(schedule.sdate + schedule.stime, schedule.sdate + schedule.stime+ schedule.duration, '[]') &&
tsrange(new.sdate + new.stime, new.sdate + new.stime+ new.duration, '[]')
from schedule
where new.rno=schedule.rno and new.bno=schedule.bno))
THEN raise exception 'ERROR! The room is already occupied during this time';
ELSE
return new;
END IF;
END;
$schedule_trigger$ LANGUAGE plpgsql;