mysql存储过程实战
今天科比离去,今天肺炎病毒持续肆虐。。。
意识到生命的脆弱,今天我继续前行,比以往更加坚定和紧迫,这辈子不活好自己就算白来一趟。
最近需要用到mysql存储过程去处理一些表数据,然后利用java poi导出excel数据。
既然用了那就总结一下用到的知识点:
1.声明变量
declare
2.参数
in/out 参数名 数据类型
3.查询赋值
select into 和oracle相似。
4.结果集循环
声明游标,然后打开赋值循环,再赋值。
5.case..when语句
可以直接case
6.条件控制语句
if .. then
else
end if;
7.循环语句
对比oracle for循环,使用while
8.mybatis如何调用?
<select id="updateWorkDt" parameterType="map" useCache="false" statementType="CALLABLE">
<![CDATA[
call proc_update_work_dt(#{year,mode=IN,jdbcType=VARCHAR},#{month,mode=IN,jdbcType=VARCHAR});
]]>
</select>
有不懂得直接看我的存储过程(省略了部分):
DROP PROCEDURE IF EXISTS `proc_update_work_dt`;
CREATE PROCEDURE `proc_update_work_dt`(in p_year varchar(32), in p_month varchar(32))
BEGIN
declare v_total double DEFAULT 0;
declare v_hours double DEFAULT 0;
declare v_begin_dt VARCHAR(100);
declare v_end_dt VARCHAR(100);
declare v_work_day VARCHAR(100);
declare v_work_time VARCHAR(100);
declare v_count int; /*总记录数*/
declare i int DEFAULT 1;
declare j int DEFAULT 0;
declare no_more_row int default 0;
declare v_seqno int;
declare v_d1 VARCHAR(100);
declare v_d2 VARCHAR(100);
declare v_d3 VARCHAR(100);
...
declare c_dt cursor for
select seqno,d1,d2,d3,d4,d5,d6,d7 from work_dt;
declare CONTINUE HANDLER for not found
set no_more_row=1;
open c_dt;
fetch c_dt into v_seqno,v_d1,v_d2,v_d3,v_d4,v_d5,v_d6,v_d7;
while !no_more_row DO
set v_total = 0;
set i = 1;
while i <= 31 DO
set v_work_day = CONCAT(p_year,'-',p_month,'-',i,' ');
case i
when 1 then
set v_work_time = v_d1;
when 2 then
set v_work_time = v_d2;
when 3 then
...
end case;
select substr(v_work_time,1,instr(v_work_time,'-')-1),substr(v_work_time,instr(v_work_time,'-')+1, length(v_work_time))
into v_begin_dt, v_end_dt;
set v_hours = 0;
if(v_begin_dt is not null and v_begin_dt!='' and v_end_dt is not null and v_end_dt != '') then
set v_begin_dt = concat(v_work_day,v_begin_dt);
set v_end_dt = concat(v_work_day,v_end_dt);
select truncate(timestampdiff(MINUTE, DATE_FORMAT(v_begin_dt,'%Y-%m-%d %H:%i'),DATE_FORMAT(v_end_dt,'%Y-%m-%d %H:%i'))/60,1)
into v_hours;
set v_total = v_total+v_hours;
case i
when 1 then
update work_dt set h1 = v_hours where seqno = v_seqno;
when 2 then
update work_dt set h2 = v_hours where seqno = v_seqno;
when 3 then
update work_dt set h3 = v_hours where seqno = v_seqno;
...
end case;
else
case i
when 1 then
update work_dt set h1 = null where seqno = v_seqno;
when 2 then
update work_dt set h2 = null where seqno = v_seqno;
when 3 then
...
end case;
end if;
set i=i+1;
end WHILE;
update work_dt
set total = v_total
where seqno = v_seqno;
fetch c_dt into v_seqno,v_d1,v_d2,v_d3
end while;
close c_dt;
end;
mysql存储过程实战的更多相关文章
- MySQL存储过程之游标实战
MySQL存储过程之游标实战 博主日前在解决一个项目需求时,没有什么好的方法,于是就来学习存储过程了,之前也是接触过,奈何年少贪玩,竟是全部又还给了大学老师-苦不堪言呐-. 先说一下业务需求吧 ...
- mysql颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量
继续回到沈老师的MYSQL颠覆实战,首先回顾下上一节课的内容,请大家会看下上节课写的存储过程. 打开prod_clicklog表, 我们只要把日期(不含时分秒)的部分存在数据库中, 如果同一日期有相同 ...
- mysql颠覆实战笔记(四)--商品系统设计(一):商品主表设计
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- mysql颠覆实战笔记(一)--设计一个项目需求,灌入一万数据先
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- mysql颠覆实战笔记(六)--商品系统设计(三):商品属性设计之固定属性
今天我们来讲一下商品属性 我们知道,不同类别的商品属性是不同的. 我们先建一个表prod_class_attr:
- mysql颠覆实战笔记(三)-- 用户登录(二):保存用户操作日志的方法
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- mysql颠覆实战笔记(二)-- 用户登录(一):唯一索引的妙用
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- MySQL存储过程(转)
一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b" ...
- MySql存储过程
MySQL 存储过程 ```sql CREATE PROCEDURE myprocedure (IN para01 INTEGER) BEGIN DECLARE var01 CHAR(10); IF ...
- mysql存储过程和存储函数
mysql存储过程和存储函数 存数函数代码示例: DROP PROCEDURE IF EXISTS calc_ci_day_suc_rate; delimiter // CREATE FUNCTION ...
随机推荐
- [转帖]各个版本Windows系统中自带的.NET Framework版本
① Windows Server : Windows Server版本 自带的.NET Framework 版本 Windows Server 2022 .NET Framework 4.8 Wind ...
- [转帖]SQL Server中查询CPU占用高的SQL语句
本文导读:触发器造成死锁.作业多且频繁.中间表的大量使用.游标的大量使用.索引的设计不合理.事务操作频繁.SQL语句设计不合理,都会造成查询效率低下.影响服务器性能的发挥.我们可以使用sql serv ...
- [转帖]oswbb工具分析主机性能
https://www.cnblogs.com/lkj371/p/15154268.html 在进行数据库故障分析和数据库例行扩容评估时,需要对数据库主机的CPU.内存.磁盘.网络进行负荷分析,常规处 ...
- [转帖]宁可信鬼,也不信 iowait 这张嘴!
https://zhuanlan.zhihu.com/p/407333624 原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处. 我们经常遇到iowait这个名词,在top命 ...
- [转帖]Linux 中unzip解压时中文乱码的解决办法
https://www.yii666.com/blog/163883.html Linux 中unzip解压时中文乱码的解决办法 当我们在linux中解压一个含有中文名字的压缩包如"资料.z ...
- [转帖]JVM 参数
https://www.cnblogs.com/xiaojiesir/p/15636100.html 我们可以在启动 Java 命令时指定不同的 JVM 参数,让 JVM 调整自己的运行状态和行为,内 ...
- github-keydb 知识
https://github.com/Snapchat/KeyDB KeyDB is now a part of Snap Inc! Check out the announcement here R ...
- 除了Adobe之外,还有什么方法可以将Excel转为PDF?
前言 Java是一种广泛使用的编程语言,它在企业级应用开发中发挥着重要作用.而在实际的开发过程中,我们常常需要处理各种数据格式转换的需求.今天小编为大家介绍下如何使用葡萄城公司的的Java API 组 ...
- 使用css 与 js 两种方式实现导航栏吸顶效果
场景描述 简单的说一下场景描述:这个页面有三个部分组成的. 顶部的头部信息--导航栏--内容 当页面滚动的时候.导航栏始终是固定在最顶部的. 我们使用的第一种方案就是使用css的粘性定位 positi ...
- 【小测试】VictoriaMetrics中如何汇总单个time series上的多个data point?
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 问题最终在andy专家的帮助下解决,但是内部的原理还是很迷 ...