2013-10-17 59 views
0

這是。它應該循環120,000次,但它只能執行兩次。手動運行時,SELECT DISTINCT barcode FROM albumitemdetails_custom;會返回120,000行。我的代碼有什麼問題?爲什麼我的MySQL存儲過程不循環?

DELIMITER $$ 

CREATE DEFINER=`testuser`@`%` PROCEDURE `AlbumMover`() 
BEGIN 

    DECLARE done INT DEFAULT 0; 
    DECLARE barcode varchar(100); 
    DECLARE cur1 CURSOR FOR SELECT DISTINCT barcode FROM albumitemdetails_custom; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

    OPEN cur1; 

    REPEAT 
    FETCH cur1 INTO barcode; 

     CALL AlbumMoverGenre(barcode); 
     CALL AlbumMoverProducer(barcode); 

    UNTIL done END REPEAT; 

    CLOSE cur1; 

END 

回答

1

根據我的經驗,如果有一個SELECT語句不返回任何結果,或課程的FETCH循環被打破。由於您沒有顯示AlbumMoverGenreAlmbumMoverProducer的代碼,所以無法從您的代碼中說出,但我會檢查這兩種情況是否都是這種情況。

只要看看你的代碼,任何一個子程序都會出錯。

因爲它在第二次迭代中斷,我會得到不同條形碼查詢的結果集並運行帶有該值的子過程,並查看結果是什麼。

+0

即使取出潛艇並進行基本日誌記錄,也只會顯示兩次循環。這不是其他的電話。 –

+0

您是否嘗試在結果集中運行其他兩個帶有第二個條形碼的潛艇? –