通过传递节假日信息基础表主键、节日开始时间,添加或修改日期信息表中所属节日、所属节日第几天信息,达到配置节假日信息功能。
在mysql存储过程《2》中使用了loop完成此配置节假日的功能,现在使用另外两种循环方式完成此功能。
一:使用while。
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;
FETCH cu INTO dateOne;
WHILE done = FALSE DO
UPDATE util_date
SET holidayid = holiday,
dayoffset = offsetValue
WHERE
date = dateOne;
SET offsetValue = offsetValue + 1;
FETCH cu INTO dateOne;
END
WHILE;
CLOSE cu;
END
二:使用repeat。
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;
REPEAT
FETCH cu INTO dateOne;
IF done = FALSE THEN
UPDATE util_date
SET holidayid = holiday,
dayoffset = offsetValue
WHERE
date = dateOne;
SET offsetValue = offsetValue + 1;
END
IF;
UNTIL done
END
REPEAT
;
CLOSE cu;
END
mysql中的while和repeat就像是java中的while和do……while。

被折叠的 条评论
为什么被折叠?



