Как я вижу из данных следующий диапазон дат всегда продолжает предыдущий. Таким образом, вы можете просто проверить, больше ли новый start_date, чем max (end_date). Например:
create or replace procedure insert_date(p_start_date date, p_end_date date)
is
l_min_date date;
l_max_date date;
begin
select min(start_date), max(end_date)
into l_min_date, l_max_date
from registers;
if (p_start_date > l_max_date) and (p_end_date > p_start_date) then
insert into registers(start_date, end_date) values(p_start_date, p_end_date);
end if;
end;
Если пользователь может ввести дату в прошлом (например, 01.01.1980 - 31.01.1980), тогда предложение "if" будет выглядеть как это
... if (p_start_date > l_max_date or p_end_date < l_min_date) and (p_end_date > p_start_date) then ...