Я рекомендую вам создать триггер (или, что еще лучше, API на основе пакета PL / SQL), чтобы при внесении изменений в таблицу EMP_LEAVE_REQUEST вы записывали выходные дни в другую таблицу, что-то вроде EMP_LEAVE_REQUEST_DAYS. Это может занять различные бизнес-логики c, такие как праздники, выходные и др. c. в учетную запись. Тогда вы вместо этого выполняете запросы для выходных для этой таблицы.
Вот базовый c пример ... С учетом этих таблиц:
create table requests (
id number generated by default on null as identity
constraint requests_id_pk primary key,
from_date date,
to_date date
);
create table request_dates (
id number generated by default on null as identity
constraint request_dates_id_pk primary key,
request_id number
constraint request_dates_request_id_fk
references requests on delete cascade,
request_date date
);
Вы можете использовать триггер как это:
create or replace trigger biu_request_trg
after insert or update on requests
for each row
declare
l_days number;
begin
delete from request_dates
where request_id = :new.id;
l_days := :new.to_date - :new.from_date;
for x in 0 .. l_days - 1
loop
insert into request_dates (
request_id,
request_date
) values (
:new.id,
:new.from_date + x
);
end loop;
end;
/
Если вы запустили эту вставку сегодня (2020/04/22):
insert into requests (
from_date,
to_date
) values (
trunc(sysdate),
trunc(sysdate+5)
);
Вы получите эти строки в request_dates:
1 1 04/22/2020
2 1 04/23/2020
3 1 04/24/2020
4 1 04/25/2020
5 1 04/26/2020