您现在的位置: 主页 > 嵌入式操作系统 > Linux > Oracle存储过程根据指定日期返回(N个)工作日的时间
本文所属标签:
为本文创立个标签吧:

Oracle存储过程根据指定日期返回(N个)工作日的时间

来源:net 网络用户发布,如有版权联系网管删除 2018-07-11 

一直都没写过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

SELECT to_number(to_char(sysdate+i+j,'D')) into dayOfWeek FROM DUAL;--返回星期代表的数值

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

SELECT to_number(to_char(sysdate-i-j,'D')) into dayOfWeek FROM DUAL;

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;



              查看评论 回复



嵌入式交流网主页 > 嵌入式操作系统 > Linux > Oracle存储过程根据指定日期返回(N个)工作日的时间
 往前 日期 工作日

"Oracle存储过程根据指定日期返回(N个)工作日的时间"的相关文章

网站地图

围观()