предотвратить перекрытие дат. у нас есть 2 даты, то есть начальная дата и конечная дата, нам нужно написать триггер, который предотвращает перекрытие дат. то есть мы не можем иметь новую запись, если уже есть дата начала того, что мы вводим. мы должны рассмотреть обе ситуации, т.е. new_boking_from> old_booking_from и new_booking_to
Код для того же:
set echo on ;
CREATE OR REPLACE TRIGGER check_booking
BEFORE INSERT ON booking
FOR EACH ROW
BEGIN
if (((:new.resort_id,:new.cabin_no)in (select b.resort_id ,b.cabin_no from booking b))
and
(:new.booking_from) > (select b.booking from booking where :new.resort_id = b.resort_id and :new.guest_no = b.guest_no))
or
(((:new.resort_id,:new.cabin_no)in (select b.resort_id ,b.cabin_no from booking b))
and
(:new.booking_to)< (select b.booking from booking where :new.resort_id = b.resort_id and :new.guest_no = b.guest_no))
then
raise_application_error(-20000, 'This is an overlap');
end if;
end;
/
set echo off;