ORACLE存储过程--输入年份获取本年的每一天(2020为例)
输入年份获取本年的每一天(2020为例)
- 创建表
- 创建日历表 YC_CALENDAR
- 创建参数表 T_PARAM
- 存储过程
创建表
创建日历表 YC_CALENDAR
以下是表结构
-- Create table
create table YC_CALENDAR
(YC_YEAR NVARCHAR2(20),YC_QUARTER VARCHAR2(20),YC_MONTH VARCHAR2(20),YC_WEEKNUM VARCHAR2(20),YC_DAY VARCHAR2(20),YC_WORKDAY NUMBER,YC_WEEK NVARCHAR2(20),YC_DATE_VALUE DATE not null
)
tablespace USERSpctfree 10initrans 1maxtrans 255storage(initial 64Kminextents 1maxextents unlimited);
-- Add comments to the columns
comment on column YC_CALENDAR.YC_YEARis '年份';
comment on column YC_CALENDAR.YC_QUARTERis '季度';
comment on column YC_CALENDAR.YC_MONTHis '月份';
comment on column YC_CALENDAR.YC_WEEKNUMis '这个月的第几周';
comment on column YC_CALENDAR.YC_DAYis '天数';
comment on column YC_CALENDAR.YC_WORKDAYis '是否工作日,0代表放假,1代表补班';
comment on column YC_CALENDAR.YC_WEEKis '星期几';
comment on column YC_CALENDAR.YC_DATE_VALUEis '总日期';
-- Create/Recreate primary, unique and foreign key constraints
alter table YC_CALENDARadd constraint DATEKEY primary key (YC_DATE_VALUE)using index tablespace USERSpctfree 10initrans 2maxtrans 255storage(initial 64Kminextents 1maxextents unlimited);
创建参数表 T_PARAM
以下是表结构
该表存的是2020年的特殊节假日,p_code 0为休假,1为补班
-- Create table
create table T_PARAM
(P_DATE DATE not null,P_CODE VARCHAR2(10) not null,ISYES VARCHAR2(5) not null
)
tablespace USERSpctfree 10initrans 1maxtrans 255storage(initial 64Kminextents 1maxextents unlimited);
-- Add comments to the columns
comment on column T_PARAM.P_DATEis '日期:精确到天';
comment on column T_PARAM.P_CODEis '0代表放假,1代表补班';
comment on column T_PARAM.ISYESis '0代表无效,1代表有效';
-- Create/Recreate primary, unique and foreign key constraints
alter table T_PARAMadd constraint P_DATE primary key (P_DATE)using index tablespace USERSpctfree 10initrans 2maxtrans 255storage(initial 64Kminextents 1maxextents unlimited);
下图是参数表的部分数据
存储过程
该存储过程为有参,输入年份2020,得到2020年的每一天数据
create or replace procedure YC_GetCalendar(START_DATE VARCHAR2) isy_year varchar2(20); --日期对应的年份y_quarter varchar2(20); --日期对应的季度y_month VARCHAR2(20); --日期对应的月份y_weeknum VARCHAR2(20); --这个月的第几周y_day VARCHAR2(20); --日期对应的天数y_workday VARCHAR2(20); --是否工作日y_week VARCHAR2(20); --星期几y_datevalue date; --总日期y_count NUMBER; --表YC_CALENDAR的数据量y_code number; --接收参数表中的是否节假日code,0或者1y_paramnum number; --表示查询参数表获得的数据量,0未查到,1查到一条数据。 y_num VARCHAR2(20); --接收拼接字符串begin/**判断表中有无数据,若有数据删除表中数据**/select count(*) into y_count from yc_calendar;if y_count>0then--delete from yc_calendar;execute immediate 'truncate table yc_calendar';end if;--commit; /**判断输入的日期是否为空,为空弹窗提示异常**/if start_date is nullthenraise_application_error(-20002,'输入为空');end if;/**将输入的年份拼接成字符串(这一年的第一天)**/y_num:=(start_date||'-01-01');y_datevalue := to_date(y_num,'YYYY-MM-DD'); --获取日期(date类型)loopy_year :=substr(to_char(y_datevalue,'YYYY-MM-DD'),1,4); --获取年份y_quarter :=to_char(y_datevalue,'q'); --获取季度y_month :=substr(to_char(y_datevalue,'YYYY-MM-DD'),6,2); --获取月份y_day :=substr(to_char(y_datevalue,'YYYY-MM-DD'),9,2); --获取日y_week :=to_char(y_datevalue,'day'); --星期几y_weeknum :=to_char(y_datevalue,'W'); --这个月的第几周/**周六周天为休息日(节假日特殊情况另当别论)**/if(y_week='星期六' or y_week='星期日')theny_workday :=0;elsey_workday :=1;end if; /**以循环数据的时间为条件,若在特殊日期表中查到数据,则将p_code赋值。**/select count(p_code) into y_paramnum from t_param where p_date=y_datevalue;if(y_paramnum>0)thenselect p_code into y_code from t_param where p_date=y_datevalue;y_workday := y_code;end if; /**插入数据。**/insert into yc_calendar values(y_year,y_quarter,y_month,y_weeknum,y_day,y_workday,y_week,y_datevalue);y_datevalue :=y_datevalue+1;/**当日期大于每一年的12-31时跳出循环**/exit when y_datevalue > to_date(start_date||'-12-31','YYYY-MM-DD');end loop;commit;
end YC_GetCalendar;
最终数据部分展示
ORACLE存储过程--输入年份获取本年的每一天(2020为例)相关推荐
- oracle 存储过程 输入,Oracle 存储过程加密方法
软件环境: 1.操作系统:Windows 2000 Server 2.数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 3.安装路径:C:ORACLE 实现方法: 1. D: ...
- oracle存储过程 取时间格式,Oracle存储过程获取YYYY-MM-DD的时间格式
环境:Oracle 10g,11g 问题重现:PL/SQL中命令窗口下,发现存储过程得到的时间格式不符合预期要求. SQLgt; select sysdate fro 环境:Oracle 10g,11 ...
- php yyyymmddhh24mi,Oracle存储过程获取YYYY-MM-DD的时间格式
环境:Oracle 10g,11g 问题重现:PL/SQL中命令窗口下,发现存储过程得到的时间格式不符合预期要求. SQLgt; select sysdate fro 环境:Oracle 10g,11 ...
- Oracle --存储过程,输入不定个数参数
2019独角兽企业重金招聘Python工程师标准>>> 一般来说,写存储过程时,输入的参数个数是固定的,但最近业务需求,输入的参数不固定. 思路:oracle存储过程的输入参数个数. ...
- vc 获取月份的天数_「青少年编程」课程:输入年份与月份,得到该月有多少天...
题目:输入年份与月份,说出该月共有多少天. 思路: 1.3.5.7.8.10.12每个月都有31天: 4.6.9.11每个月都有30天: 2月比较特殊,一般都是28天,遇到闰年(公历里:能被400整除 ...
- oracle存储过程获取异常信息码和异常信息
oracle存储过程,可以通过sqlcode 获取异常编码.通过sqlerrm获取异常信息. 例子: create or replace procedure write2blob(p_id in nu ...
- oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...
java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...
- 如何获取Oracle存储过程中的参数名称、类型?
在.net环境下如何通过存储过程明来获取Oracle存储过程的输入输出参数?获取后用于动态赋值参数的值. 转载于:https://www.cnblogs.com/sokoo/archive/2008/ ...
- android 选择年月日历,Android_java万年历,获取该年月日历表,这篇文章应用java技术输入年份 - phpStudy...
java万年历,获取该年月日历表 这篇文章应用java技术输入年份和月份获取该年月日历表,下面通过一段代码给大家做展示: 输入年份和月份,打印出这个月的日历表 1.1900年1月1日是星期一 2.计算 ...
最新文章
- ValueError: urls must start with a leading slash
- weekly 2019-02-15
- php中插入表格 标签,PHP_HTML中的表格元素,一,table标签。tablegt - phpStudy
- hdfs restful API:httpfs与webhdfs的简单使用
- Python Django 配置静态资源访问(settings配置)
- C语言sendto()函数:经socket传送数据
- C++ 拷贝构造函数与赋值构造函数调用时机初步01
- 火星人(洛谷P1088题题解,C++语言描述)
- linux枯燥命令行下的“有趣命令”
- 当我们谈微服务,我们在谈什么?谈谈我对微服务的理解!
- python sys.modules
- 蘑菇车联打造一体化解决方案,致力产业协同发展
- windows系统生成tar
- 页面前端的水有多深?再议页面开发
- java data文件夹_java-如何在不指定父文件夹/ ref的情况下遍历Datasnapshot
- python3源码安装_源码安装Python3
- html学习文档-8、HTML 图像
- centos5编译内核
- Code Review 是一场苦涩但有意思的修行 | 凌云时刻
- java学习第123天,p750-761(05/23)干得漂亮