2009-06-29 46 views
0

我希望以下存儲程序返回行的一個系列,而它只返回1Mysql的光標/取

CREATE PROCEDURE example() 
    BEGIN 
     DECLARE current_id INT; 
     DECLARE done INT DEFAULT 0; 
     DECLARE cur_main CURSOR FOR SELECT id from tasks; 
     DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; 

     OPEN cur_main; 

     FETCH cur_main into current_id; 
     lp:WHILE not done DO 
      FETCH cur_main into current_id; 
      IF done = 1 THEN 
       LEAVE lp; 
      END IF; 
      SELECT * from tasks WHERE id = current_id; 
     END WHILE lp; 

     CLOSE cur_main; 
    END 

任何幫助嗎?這是我第一次使用MySQL存儲例程。

回答

0

你可能想試試這個陳述,而不是你現有的測試。

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

對於不匹配的SQLSTATE值,繼續處理程序的缺省操作是EXIT。 「未找到」常數涵蓋所有有效的020條件。

+0

它仍然返回相同的單行.. – pistacchio 2009-06-29 18:32:13

0

這是另一種可能性。在再次查看你的代碼時,我注意到你在while循環之前做了一個FETCH,它會給你第一個記錄。你進入WHILE循環,然後做另一個FETCH。通常,您將進入while循環,使用當前記錄進行處理,然後在循環循環之前執行另一個FETCH。另外,通過將下一個FETCH移動到循環體的末尾,您也可以移除IF測試。

FETCH cur_main into current_id; 
lp:WHILE not done DO 
    SELECT * from tasks WHERE id = current_id; 
    FETCH cur_main into current_id; 
END WHILE lp; 
1

不幸的是,MySQL不會以這種方式返回多行。

此過程:

CREATE PROCEDURE example() 
BEGIN 
    SELECT 1; 
    SELECT 2; 
END; 

將返回多個結果,不是行。

你能否描述一下你想用這個存儲過程實現什麼任務?

0

感謝您的回覆。 我設法做我所做的與臨時表的幫助下,我插入所有的結果,然後選擇*從該表。