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