• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql存储过程《二》_mysql

mysql 搞代码 7年前 (2018-06-07) 147次浏览 已收录 0个评论

mysql存储过程《2》

首先说明一下使用的存储过程功能效果:

通过传递节假日信息基础表主键节日开始时间,添加或修改日期信息表中所属节日、所属节日第几天信息,达到配置节假日信息功能。

第一张表,节假日信息基础表:

mysql存储过程《二》_mysql

表说明:主键、节日名称,节日天数。

第二张表,日期信息表:

mysql存储过程《二》_mysql
 表说明:主键、年、月、日、周第几天、农历、所属节日、所属节日第几天、日期。

存储过程:

DROP PROCEDURE IF EXISTS holiday;  CREATE PROCEDURE holiday (  IN holiday INT,  IN startTime VARCHAR (12) ) BEGIN  DECLARE   C INT DEFAULT 0;  DECLARE  dateOne VARCHAR (12);  DECLARE  offsetValue INT DEFAULT 1;  DECLARE  done INT DEFAULT FALSE;  DECLARE  cu CURSOR FOR SELECT   date  FROM   util_date  WHERE   date >= startTime  LIMIT C;  DECLARE  CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;  SELECT  days INTO C FROM  util_holiday WHERE  id = holiday;  UPDATE util_date SET holidayid = '0',  dayoffset = '0' WHERE  YEAR = SUBSTRING(startTime, 1, 4) AND holidayid = holiday;  OPEN cu;  read_loop : LOOP  FETCH cu INTO dateOne;   IF done THEN  LEAVE read_loop;   END IF;  UPDATE util_date SET holidayid = holiday,  dayoffset = offsetValue WHERE  date = dateOne;   SET offsetValue = offsetValue + 1;   END LOOP ;  CLOSE cu;   END

 存储过程说明:

1.传递两个IN类型参数:一个INT,节假日信息基础表主键,一个VARCHAR,节假日开始时间。

2.定义变量,C用于记录节日天数,dateOne用于记录游标迭代时的日期,offsetValue用于赋值节假日第几天,done用于记录游标值是否迭代结束,以在适当时候结束LOOP循环,cu定义的游标,用于存储节假日内的日期。

3.打开游标前,先更新传递参数中该节日、年份的节假日和节日第几天信息为默认值。

4.打开游标,开启循环,取游标内的值,更新数据,更新相关变量值;在取游标值后要判断是否已经取完所有值以跳出循环关闭游标。

5.需要注意的地方,存储过程中的查询赋值或更新数据库操作要放在定义游标之后。

欢迎大家阅读mysql存储过程《二》_mysql》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql存储过程《二》_mysql

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址