欢迎技术交流。 QQ:138986722

创建table:

create table tbmeetmgrinfo(

id number primary key, /*主键,自动增加 */

huiyishi number, /*会议室编号 */

STARTTIME varchar2(30), /*会议开始时间 */

ENDTIME varchar2(30), /*会议结束时间 */

CREATETIME varchar2(30), /*会议创建日期 */

STOPTIME varchar2(30), /*会议起止日期*/

xunhuaimoshi number /*会议循环模式1为单周、3为每月、4为每季度 、0为一次性会议*/

);

--创建自动增长序列

create sequence tbmeetmgrinfo_tb_sequence

minvalue 1 --最小值

maxvalue 9999999999999999999999999 --最大值

increment by 1 --增加量为1

start with 1 /* 从1开始 */

insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,2,'12:00','13:00','2011-05-10','2011-05-11',1)

select * from tbmeetmgrinfo

创建触发器:

create or replace trigger biufer_tbmeetmgr_CHANGETIME

before insert or update or delete

of CHANGETIME

on tbmeetmgr

for each row

begin

-- 调用存储过程

hzwmeetmgr;

end;

存储过程:

CREATE OR REPLACE PROCEDURE hzwmeetMgr is

meetId number; --会议室编号

strSta varchar2(30); --会议开始时间

strEnd varchar2(30); --会议结束时间

strCreate varchar2(30); --会议创建日期

strOver varchar2(30); --会议终止日期(循环终止时期)

strOverSql varchar2(30); --存入临时表中的终止日期

varInt number; --会议创建日期到终止日期相差天数

varSubTime varchar2(30); --循环日期

varMonths number;

TYPE c_time IS REF CURSOR; --创建游离标记

vrec c_time;

yearY varchar2(10); --日期年部分

monthsM varchar2(10);--日期月部分(终止入库时间)

begin

delete tbmeetmgrinfo where 1=1 ; --先清空表中数据

commit;

varInt := 0;

--一次性会议记录

for varCode in (select id ,huiyishi,STARTTIME,ENDTIME,CREATETIME,STOPTIME,xunhuairiqi from tbmeetmgr

where HUIYIMOSHI = 1 and to_date(stoptime,'yyyy-MM-dd') >=

to_date(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd'))

loop

strOver := varCode.Stoptime;

strCreate := substr(varCode.Createtime,1,10);

meetId := varCode.Huiyishi;

strSta := varCode.Starttime;

strEnd := varCode.Endtime;

varSubTime := substr(varCode.Xunhuairiqi,3);

--最后的0代表的是一次性会议、循环模式1为单周、3为每月、4为每季度

insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,meetId,strSta,strEnd,strCreate,strOver,0);

commit;

end loop;

--单周循环

for varCode in (select id ,huiyishi,STARTTIME,ENDTIME,CREATETIME,STOPTIME,xunhuairiqi,(( to_date(stoptime,'yyyy-mm-dd') - next_day

(to_date(substr(createtime, 0, 10),'yyyy-mm-dd')-1,3))/7) resultNum from tbmeetmgr

where xunhuaimoshi = 1 and to_date(stoptime,'yyyy-MM-dd') >=

to_date(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd'))

loop

varInt := ceil(varCode.Resultnum);

strOver := varCode.Stoptime;

strCreate := substr(varCode.Createtime,1,10);

meetId := varCode.Huiyishi;

strSta := varCode.Starttime;

strEnd := varCode.Endtime;

varSubTime := substr(varCode.Xunhuairiqi,3);

OPEN vrec for SELECT to_char(next_day(to_date(strCreate,'yyyy-mm-dd')-1,ceil(varSubTime)+1)+(rownum-1)*7 , 'yyyy-MM-dd')

from dual connect by rownum<=varInt ;

LOOP

FETCH vrec INTO strOverSql; --入库终止日期

exit when vrec%notfound;

--dbms_output.put_line('----+++++单周循环日期++++++-----:'||strOverSql);

insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,meetId,strSta,strEnd,strCreate,strOverSql,1);

commit;

end loop;

end loop;

--每月循环

for varCodeMonths in(select id ,huiyishi,STARTTIME,ENDTIME,CREATETIME,STOPTIME,

Xunhuairiqi,ceil(months_between(to_date(stoptime,'yyyy-mm-dd'),

to_date(substr(createtime, 0, 10),'yyyy-mm-dd'))) months from tbmeetmgr

where xunhuaimoshi = 3 and to_date(stoptime,'yyyy-MM-dd') >=

to_date(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd'))

loop

strOver := varCodeMonths.Stoptime;

strCreate := substr(varCodeMonths.Createtime,1,10);

meetId := varCodeMonths.Huiyishi;

strSta := varCodeMonths.Starttime;

strEnd := varCodeMonths.Endtime;

varMonths := varCodeMonths.Months;

varSubTime := substr(varCodeMonths.Xunhuairiqi,3,4); --取得开会时间(具体哪一日)

yearY := substr(strCreate,1,8);

monthsM := yearY||varSubTime ;

OPEN vrec for SELECT to_char(add_months(to_date(monthsM,'yyyy-MM-dd'),+(rownum-1)), 'yyyy-mm-dd')

from dual connect by rownum<= ceil(varMonths) ;

LOOP

FETCH vrec INTO strOverSql; --入库终止日期

exit when vrec%notfound;

--dbms_output.put_line('月度时间:'||strOverSql);

insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,meetId,strSta,strEnd,strCreate,strOverSql,3);

commit;

end loop;

end loop;

--每季度循环

for varCodeMonths in(select id ,huiyishi,STARTTIME,ENDTIME,CREATETIME,STOPTIME,

Xunhuairiqi,ceil((to_date(stoptime,'yyyy-mm-dd')-to_date(substr(createtime, 0, 10),'yyyy-mm-dd'))/90) months

from tbmeetmgr where xunhuaimoshi = 4 and to_date(stoptime,'yyyy-MM-dd') >=

to_date(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd'))

loop

strOver := varCodeMonths.Stoptime;

strCreate := substr(varCodeMonths.Createtime,1,10);

meetId := varCodeMonths.Huiyishi;

strSta := varCodeMonths.Starttime;

strEnd := varCodeMonths.Endtime;

varMonths := varCodeMonths.Months;

varSubTime := substr(varCodeMonths.Xunhuairiqi,3,7); --取得开会时间(具体哪一日)

yearY := substr(strCreate,1,5);

monthsM := yearY||varSubTime ;

OPEN vrec for SELECT to_char(add_months(to_date(monthsM,'yyyy-MM-dd'),+(rownum-1)*3), 'yyyy-mm-dd')

from dual connect by rownum<= ceil(varMonths) ;

LOOP

FETCH vrec INTO strOverSql; --入库终止日期

exit when vrec%notfound;

--dbms_output.put_line('季度循环日期:'||strOverSql);

insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,meetId,strSta,strEnd,strCreate,strOverSql,4);

commit;

end loop;

end loop;

end;

oracle存储过程季度方法,Oracle存储过程、触发器实现获取时间段内周、月、季度的具体时间...相关推荐

  1. java8 日期范围内 日/周/月/季度/年 的日期结果集

    java8 日期范围内 日/周/月/季度/年 的日期结果集 /*** 根据时间范围列出所有日/周/月/季/年** @Author Moqi* @Date 2020/4/30* @Version V1. ...

  2. mysql分季度统计数据,mysql按日周月季度统计数据

    mysql按日周月季度统计数据 mysql按日.周.月.季度统计数据 1.使用DATE_FORMAT做等值条件查询 2.DATE_FORMAT函数语法,参考w3school 3.可使用格式 4.使用示 ...

  3. java获取时间段内所有季度

    package com.vxdata.activity.utils;import java.time.LocalDate; import java.util.*; import java.util.s ...

  4. oracle分页的方法,Oracle数据库分页的集中方法(三种方法)

    在 做项目中用到了分页,下面说一下oracle分页的方法; 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; ...

  5. C#连接Oracle数据库的方法(Oracle.DataAccess.Client也叫ODP.net)

    官方下载地址(ODP.net)(中文):http://www.oracle.com/technetwork/cn/topics/dotnet/downloads/index.html 官方下载地址(O ...

  6. mysql存储过程注释方法_mysql存储过程 详细注释

    原文:https://my.oschina.net/u/3582142/blog/1581929 delimiter $$ /* 重新定义mysql结束符,而不再是分号是结束符 */ create p ...

  7. MySQL 按周,月,季度,年查询

    一.年度查询 查询 本年度的数据 <span style="font-size:18px;">SELECT * FROM tableName WHERE year( t ...

  8. oracle生成xml方法,oracle存储过程生成xml==转

    1.创建如下存储过程,注意将其中location =>'d:\work'之中的目录改为你本机的某个目录. create or replace procedure getXML(newContex ...

  9. oracle分页的方法,oracle分页

    Oracle 的 oracle分页 oracle的分页一共有三种方式 方法一 根据rowid来分 SELECT * FROM EMP WHERE ROWID IN (SELECT RID FROM ( ...

最新文章

  1. Winder摆杆不稳除了PID还可能的原因
  2. 远程桌面mstsc情况下通过\\tsclient\盘符实现内容的拷贝
  3. 引擎讲解2--主要是MyISAM和InnoDB的区别
  4. jQuery 快速入门教程
  5. Sparkmllib scala线性回归
  6. 《动物森友会》的社交分级,在虚拟世界设计舒适的社交氛围
  7. node.js JS对象和JSON字符串之间的转换
  8. Flutter之SafeArea
  9. [转载] 计算机端口详解
  10. [现代控制理论]8_LQR控制器_simulink
  11. JS加入收藏夹操作代码
  12. dBm、mw、dB三者之间的关系
  13. 骚操作——Word批量修改图片大小
  14. leetcode 算法-乘积最大子序列-152
  15. 数学对计算机的重要性
  16. 快看!!!北极点的气温在零度以上!比平常高了30度!!!!!!
  17. Python之urlparse模块
  18. android广播 有序 无序,Android中的有序和无序广播浅析
  19. 中国微型无刷直流电动机市场趋势报告、技术动态创新及市场预测
  20. Neuromation新研究:利用卷积神经网络进行儿童骨龄评估

热门文章

  1. 2013科目三道路驾驶技能通用评判标准
  2. 潜藏在人体体内的12种毒素
  3. 解决:elasticsearch 更新报错:The number of object passed must be even but was [1]
  4. Bootstrap 中: data-toggle 与 data-target 的作用
  5. java.util.IdentityHashMap.entrySet()方法实例
  6. FreeSql (三十一)分区分表
  7. android 去掉标题栏、状态栏、横屏
  8. Jstorm+Spring+mybatis整合
  9. 错误提示:'……' is not assignable to Android.app.Activity Manifest XML
  10. org-mode入门教程