mysql stored procedure "2" continued

By passing the primary key of the basic table of holiday information and the start time of the holiday, adding or modifying the information of the holiday and the day of the holiday in the date information table, the function of configuring holiday information is achieved .

In the mysql stored procedure "2", loop is used to complete the function of configuring holidays, and now two other loop methods are used to complete this function.

One: use 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
	with CURSOR FOR SELECT
		date
	FROM
		useful_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 with;

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

 Two: use 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
	with CURSOR FOR SELECT
		date
	FROM
		useful_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 with;


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

 while and repeat in mysql are like while and do in java...while.

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326918665&siteId=291194637
Recommended