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

WBOY
发布: 2016-06-07 16:00:23
原创
1648 人浏览过

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

本文永久更新链接地址

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!