2012-09-05 80 views
0

我有這個存儲過程的存儲過程數據:如何獲取從具有光標

DELIMITER // 
DROP PROCEDURE IF EXISTS cursor_example// 

CREATE PROCEDURE cursor_example() 
BEGIN 
    DECLARE niche_id INT; 
    DECLARE niche_name VARCHAR(100); 

    DECLARE curl CURSOR FOR SELECT * FROM `niche`; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; 

    OPEN curl; 
    my_loop:LOOP 
     FETCH curl INTO niche_id, niche_name; 
     IF done=1 THEN 
      LEAVE my_loop; 
     END IF; 
    END LOOP my_loop; 
    CLOSE curl; 
END// 

DELIMITER ; 

的問題是,我怎麼走利基ID和niche_name行了光標的光標之後完成迭代。我不能從存儲過程中得到一個結果集作爲變量,不能嗎?那麼使用存儲過程的遊標主要是爲了內部目的?

回答

0

如果結果是 - 「標量值」,那麼你可以使用這個變體之一:從過程

  1. 運行SELECT niche_id, niche_name;
  2. 使用OUT參數。

如果結果是一組值,那麼您應該填充另一個表,例如,臨時表。此外,如果要從表中讀取一些數據並將其存儲到另一個表中,則嘗試使用INSERT ... SELECT語句而不是打開遊標。

+0

但這沒有任何意義,該函數不會終止,直到循環結束..所有的變量被提取到兩個變量..我不能得到這兩個變量沒有他們被覆蓋在下一個循環迭代 –

+0

我有更新的答案。 – Devart