【发布时间】:2016-05-04 21:31:55
【问题描述】:
我正在 MySQL 中创建一个存储过程来循环一组值并对每个值执行相同的 INSERT/UPDATE 操作。
INSERT/UPDATE 操作保持不变,但在我编写的整个脚本中需要循环的值会发生变化。下面是我正在尝试做的一个简化示例:
DELIMITER $$
CREATE PROCEDURE `log_feed_times`()
BEGIN
DECLARE `no_more_rows` BOOLEAN;
DECLARE `current_animal` INT DEFAULT 0;
DECLARE `animal` CURSOR FOR @query;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
OPEN `animal`;
chores: LOOP
FETCH `animal` INTO `current_animal`;
IF no_more_rows = TRUE THEN
LEAVE move_now;
END IF;
UPDATE farm_animal SET last_feed_time = now() WHERE id = `animal`;
END LOOP chores;
CLOSE `animal`;
END$$
DELIMITER ;
SET @query = "SELECT id FROM farm_animal WHERE name IN ('horse', cow')";
CALL `log_feed_times`;
SET @query = "SELECT id FROM farm_animal WHERE name IN ('pig', 'duck')";
CALL `log_feed_times`;
到目前为止,我这样做的尝试导致了 ERROR 1064 (42000)。
【问题讨论】:
标签: mysql loops stored-procedures cursor