1:首先看创建一个函数

给定一个日期,判断是否是休息日.

 create or replace function test(date_in in date)
return int
is
num int;
workflag varchar2(1);
begin
select count(*) into num from Sys_Holiday
where to_char(TODAY,'yyyy-MM-dd')=to_char(date_in,'yyyy-MM-dd'); if (num>0) then
select WORKFLAG into workflag from Sys_Holiday
where to_char(TODAY,'yyyy-MM-dd')=to_char(date_in,'yyyy-MM-dd');
if (workflag='W') then
return 0;
else
return 1;
end if;
else
select to_char(date_in,'D') into num from dual;
if (num=7 or num=1) then
return 1;
else
return 0;
end if;
end if;
end;

2:另外一个函数调用这个函数,一个日期增加或减少多少天对应的日期(工作日)

 CREATE OR REPLACE FUNCTION getWorkDayADD( datetime in date,workday in int) return date
is
dayflag int; --初始值,写循环
sumflag int; --判断值
datetime1 date;
workday1 int;
sysdateadd date;
daynum int;
sysdatelast date; --返回值
begin
datetime1 :=datetime;
workday1 := workday;
dayflag :=0;
sumflag :=1;
if(workday1>0) --加减多少来决定
then
while (sumflag=workday1) loop
dayflag := dayflag+1;
select datetime1+dayflag into sysdateadd from dual;
daynum :=test(sysdateadd);
if(daynum=1)then
sumflag :=sumflag;
else
sumflag :=sumflag+1;
end if;
end loop;
else
while (sumflag=workday1) loop
dayflag := dayflag+1;
select datetime1-dayflag into sysdateadd from dual;
daynum :=test(sysdateadd);
if(daynum=1)then
sumflag :=sumflag;
else
sumflag :=sumflag+1;
end if;
end loop; end if;
if(workday1>0) then
select datetime1+dayflag into sysdatelast from dual;
else
select datetime1-dayflag into sysdatelast from dual;
end if; return (sysdatelast);
end getWorkDayADD;

3 编写一个简单的存储过程调用以上的函数

 create or replace procedure x is
c date;
datetime date;
begin
select sysdate into datetime from dual;
dbms_output.put_line(datetime);
dbms_output.put_line('');
c := getWorkDayADD(datetime,3);
dbms_output.put_line(c);
end;

4 执行存储过程

sql>exec x;

最新文章

  1. iOS controller解耦探究实现——第一次写博客
  2. 关于C++构造函数初始化顺序
  3. Hibernate一对一外键双向关联(Annotation配置)
  4. HTML URL 编码
  5. Sass细节一变量
  6. cocos2dx 屏幕适配策略
  7. Android Studio 初探
  8. C - Minimum Inversion Number
  9. 一步一步实现android studio代码上传到github。
  10. localStorage与location的用法
  11. Java面向对象 异常
  12. windows下安装mysql以及启动
  13. pytorch_SRU(Simple Recurrent Unit)
  14. Flutter 即学即用系列博客——08 MethodChannel 实现 Flutter 与原生通信
  15. spring-boot的Hello World案例,最简单的spring-boot项目
  16. Godot必须明确掌握的概念与知识
  17. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-5
  18. Join The Future (剪枝 + 状态压缩)
  19. STM32F4 Timer simplified block diagram
  20. 《转》Python学习(15)-对文件的操作(二)

热门文章

  1. EF事务嵌套
  2. WinSCP无法连接 ubuntu 的解决方法
  3. WPF内置命令
  4. python学习之深入
  5. Spring Security3中的-authentication-manager标签详解
  6. Log4j源代码学习
  7. 修改CMD字符编码
  8. Dictionary<k,v>键值对的使用
  9. 【java基础】面向对象的三大特征---多态
  10. gdb 常用内容