1
我正在處理存儲過程以更新產品表中的訂單字段。 現在只有問題是循環中的最後一項(cur),增加了兩次而不是一次(所以標記)。像這樣:SQL遊標和存儲過程訂單安排
+-----------------+ |product + order | |_id | | | | | | 1 | 0 | | 2 | 1 | | etc.. | etc..| | 36 | 35 | | 37 | 36 | | 38 | 38 | | | +-----------------+
我弄不明白爲什麼。在這種情況下的鏈接表(CategoryProduct)轉到38 2 CALL curorder(2);
存儲過程的一個CATEGORY_ID:
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數據庫。隨時歡迎任何有關改進程序的建議。
在此先感謝。
編輯:
我已經嘗試過的地方IF語句下面,但沒有結果的SET我聲明。
謝謝它的作品! briljant。下一次生病嘗試用這樣的查詢來調試它);聰明的想法 – Jacob 2013-04-05 13:33:50