Вот как вы можете сделать это с помощью процедуры:
create procedure insert_emptry_date
as
cursor c_cur
is
select (nvl(date_c - lag(date_c) over (order by date_c), 0)) as a
, date_c
from test
order by date_c;;
var_a number := 0;
begin
for rec in c_cur loop
if rec.a > 0 then
var_a := rec.a -1;
end if;
dbms_output.put_line(var_a);
if var_a > 0 then
loop
insert into test values ((rec.date_c - var_a), 1, 0);
commit;
var_a := var_a -1;
exit when var_a = 0;
end loop;
end if;
end loop;
end;
/
Вот DEMO
В этом коде я использую курсор c_cur
, чтобы получить разница между двумя датами и датой, с которой я буду вставлять другие даты.
Я использую переменную var_a
, чтобы сохранить полученную разницу с курсором, уменьшенным на 1, потому что я не хочу добавлять то же самое свидание. Затем я уменьшаю это значение до тех пор, пока оно не станет 0. (В вашем примере это значение будет: 5, затем 4, 3, 2, 1).