欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql存储过程《2》 博客分类: MySQL mysql存储过程mysql游标mysql循环 

程序员文章站 2024-03-11 18:34:25
...

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

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

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

mysql存储过程《2》
            
    
    博客分类: MySQL mysql存储过程mysql游标mysql循环 

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

第二张表,日期信息表:

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存储过程《2》
            
    
    博客分类: MySQL mysql存储过程mysql游标mysql循环 
  • 大小: 7.2 KB
  • mysql存储过程《2》
            
    
    博客分类: MySQL mysql存储过程mysql游标mysql循环 
  • 大小: 17.1 KB