一直都沒寫過Oracle的存儲過程,今天突然來了一個需求:計算指定日期的前N個工作日或者后N個工作日日期(去除周末,法定節假日無
一直都沒寫過Oracle的存儲過程,,今天突然來了一個需求:計算指定日期的前N個工作日或者后N個工作日日期(去除周末,法定節假日無法計算),然后研究了一下 Oracle的時間函數和循環方法。具體實現方法如下,也沒啥難的,對數據庫沒研究過,也不知道下面的寫法效率怎么樣。
或者有沒有更好的寫法。o(︶︿︶)o 唉!
create or replace procedure proc_CalculationWorkDate
(
plan_date in date,--登錄日期
flag in number,--1 往前日期,0往后日期
date_number in number,--天數
out_date out date--計算出的日期
)
is
dayOfWeek number:=0;--星期的數字
dates number:=date_number;--往前或者往后的天數(包含工作日的)初始化給他等于天數
i int:=0;
j int:=0;
begin
if flag=1 then--計算往前日期
while i
if dayOfWeek=1 or dayOfWeek=7 then --周六 周日
dates:=dates+1;
i:=i;
j:=j+1;
else
i:=i+1;
end if;
end loop;
select plan_date+dates into out_date from dual;
--DBMS_OUTPUT.PUT_LINE(dates);
end if;
if flag=0 then --計算往后日期
while i
if dayOfWeek=1 or dayOfWeek=7 then
dates:=dates+1;
i:=i;
j:=j+1;
else
i:=i+1;
end if;
end loop;
select plan_date-dates into out_date from dual;
--DBMS_OUTPUT.PUT_LINE(dates);
end if;
end;
本文永久更新鏈接地址:
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com