输入年份获取本年的每一天(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为例)相关推荐

  1. oracle 存储过程 输入,Oracle 存储过程加密方法

    软件环境: 1.操作系统:Windows 2000 Server 2.数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 3.安装路径:C:ORACLE 实现方法: 1. D: ...

  2. oracle存储过程 取时间格式,Oracle存储过程获取YYYY-MM-DD的时间格式

    环境:Oracle 10g,11g 问题重现:PL/SQL中命令窗口下,发现存储过程得到的时间格式不符合预期要求. SQLgt; select sysdate fro 环境:Oracle 10g,11 ...

  3. php yyyymmddhh24mi,Oracle存储过程获取YYYY-MM-DD的时间格式

    环境:Oracle 10g,11g 问题重现:PL/SQL中命令窗口下,发现存储过程得到的时间格式不符合预期要求. SQLgt; select sysdate fro 环境:Oracle 10g,11 ...

  4. Oracle --存储过程,输入不定个数参数

    2019独角兽企业重金招聘Python工程师标准>>> 一般来说,写存储过程时,输入的参数个数是固定的,但最近业务需求,输入的参数不固定. 思路:oracle存储过程的输入参数个数. ...

  5. vc 获取月份的天数_「青少年编程」课程:输入年份与月份,得到该月有多少天...

    题目:输入年份与月份,说出该月共有多少天. 思路: 1.3.5.7.8.10.12每个月都有31天: 4.6.9.11每个月都有30天: 2月比较特殊,一般都是28天,遇到闰年(公历里:能被400整除 ...

  6. oracle存储过程获取异常信息码和异常信息

    oracle存储过程,可以通过sqlcode 获取异常编码.通过sqlerrm获取异常信息. 例子: create or replace procedure write2blob(p_id in nu ...

  7. oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...

    java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...

  8. 如何获取Oracle存储过程中的参数名称、类型?

    在.net环境下如何通过存储过程明来获取Oracle存储过程的输入输出参数?获取后用于动态赋值参数的值. 转载于:https://www.cnblogs.com/sokoo/archive/2008/ ...

  9. android 选择年月日历,Android_java万年历,获取该年月日历表,这篇文章应用java技术输入年份 - phpStudy...

    java万年历,获取该年月日历表 这篇文章应用java技术输入年份和月份获取该年月日历表,下面通过一段代码给大家做展示: 输入年份和月份,打印出这个月的日历表 1.1900年1月1日是星期一 2.计算 ...

最新文章

  1. ValueError: urls must start with a leading slash
  2. weekly 2019-02-15
  3. php中插入表格 标签,PHP_HTML中的表格元素,一,table标签。tablegt - phpStudy
  4. hdfs restful API:httpfs与webhdfs的简单使用
  5. Python Django 配置静态资源访问(settings配置)
  6. C语言sendto()函数:经socket传送数据
  7. C++ 拷贝构造函数与赋值构造函数调用时机初步01
  8. 火星人(洛谷P1088题题解,C++语言描述)
  9. linux枯燥命令行下的“有趣命令”
  10. 当我们谈微服务,我们在谈什么?谈谈我对微服务的理解!
  11. python sys.modules
  12. 蘑菇车联打造一体化解决方案,致力产业协同发展
  13. windows系统生成tar
  14. 页面前端的水有多深?再议页面开发
  15. java data文件夹_java-如何在不指定父文件夹/ ref的情况下遍历Datasnapshot
  16. python3源码安装_源码安装Python3
  17. html学习文档-8、HTML 图像
  18. centos5编译内核
  19. Code Review 是一场苦涩但有意思的修行 | 凌云时刻
  20. java学习第123天,p750-761(05/23)干得漂亮

热门文章

  1. Java 视频文件、图片文件互转Base64编码(springboot)
  2. 歌华有线回看显示服务器忙,歌华有线机顶盒常见故障问题及解决办法
  3. 软件过程与项目管理之描述软件2
  4. 中龍鸿业安全稳定必学的盘口言语有哪些?什么是盘口言语?
  5. python 100以内的加法_python随机生成100道100以内的加法试卷
  6. 图形界面搭建树莓派(Raspberry pi)环境
  7. 【数据挖掘 机器学习 】总结5:听徐老师讲课第五集
  8. 利用熵值法确定指标权重---原理及Python实现
  9. Java 自动按键,以及cmd脚本调用
  10. 前端基础第二天项目 大数据大屏可视化项目