mysql存储过程实战

栏目: IT技术 · 发布时间: 4年前

内容简介:今天科比离去,今天肺炎病毒持续肆虐。。。意识到生命的脆弱,今天我继续前行,比以往更加坚定和紧迫,这辈子不活好自己就算白来一趟。最近需要用到mysql存储过程去处理一些表数据,然后利用java poi导出excel数据。

今天科比离去,今天肺炎病毒持续肆虐。。。

意识到生命的脆弱,今天我继续前行,比以往更加坚定和紧迫,这辈子不活好自己就算白来一趟。

最近需要用到 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,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31
    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,v_d8,v_d9,v_d10,v_d11,v_d12,v_d13,v_d14,v_d15,v_d16,v_d17,v_d18,v_d19,
    v_d20,v_d21,v_d22,v_d23,v_d24,v_d25,v_d26,v_d27,v_d28,v_d29,v_d30,v_d31;
		

		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,' ');
        select v_work_day;

				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,v_d4,v_d5,v_d6,v_d7,v_d8,v_d9,v_d10,v_d11,v_d12,v_d13,v_d14,v_d15,v_d16,v_d17,v_d18,v_d19,
				v_d20,v_d21,v_d22,v_d23,v_d24,v_d25,v_d26,v_d27,v_d28,v_d29,v_d30,v_d31;
		
		end while;

    close c_dt;

end;

以上所述就是小编给大家介绍的《mysql存储过程实战》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

新榜样

新榜样

新榜 编著 / 电子工业出版社 / 2016-1 / 50.00元

本书为“新榜”全新打造的新媒体运营实战指南,全书基于对当前各类公众号的对比分析,阐述互联网时代各类公众号运营之道。全书分为五个部分,分别为:如何让政务公众号接地气,如何让自媒体公众号重获新生,如何做垂直领域的特色公众号,新媒体深度人物,以及新媒体深度分析等。一起来看看 《新榜样》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器