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