【发布时间】:2013-04-05 12:22:09
【问题描述】:
我正在处理一个存储过程来更新产品表中的订单字段。 它现在唯一的问题是循环中的最后一项(cur),增加了两次而不是一次(所以被称为)。像这样:
+-----------------+ |产品+订单| |_id | | | | | | 1 | 0 | | 2 | 1 | |等等。 |等等。| | 36 | 35 | | 37 | 36 | | 38 | 38 | | | +-----------------+我不知道为什么。本例中的链接表(CategoryProduct)转到 38,category_id 为 2 CALL curorder(2);
存储过程:
DELIMITER //
CREATE PROCEDURE curorder(
IN catid INT
)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE i INT DEFAULT 0;
DECLARE p INT;
DECLARE cur CURSOR FOR SELECT product_id FROM test.CategoryProduct WHERE category_id = catid;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO p;
UPDATE `test`.`Product` SET `order` = i WHERE `Product`.`product_id` =p;
SET i = i + 1;
IF done THEN
LEAVE read_loop;
END IF;
END LOOP;
CLOSE cur;
END //
DELIMITER ;
数据库是一个 Mysql 数据库。任何改进程序的建议总是受欢迎的。
提前致谢。
编辑:
我已经尝试将 SET i STATEMENT 放在 IF 语句下方,但没有结果。
【问题讨论】:
标签: mysql sql stored-procedures cursor