1、创建节假日表,包含周六日
create table EA_DEADLINE_HOLIDAY_CONFIG
(
id NUMBER(19) not null,
description VARCHAR2(255 CHAR),
vacation_date VARCHAR2(10 CHAR)
)
2、利用迭代,写oracle function
create or replace function func_getBusiDeferDate(startdate date,deferDay number)
return date
/*返回推迟number个工作日的日期,不包含当前日期*/
is
enddate date :=startdate+deferDay;
holiday_num number:=0;
tempdate date;
begin
select nvl(count(1),0) into holiday_num from ea_deadline_holiday_config t
where t.vacation_date between to_char(startdate+1, 'yyyyMMdd') and to_char(enddate, 'yyyyMMdd');
if holiday_num!=0 then
enddate :=func_getBusiDeferDate(enddate,holiday_num);/*这里迭代,顺延的日期如果还有节假期继续计算*/
end if;
return enddate;end;
3、执行效果