2012-07-25 63 views
2

您好,我正在使用MySQL的DECLARE CONTINUE處理程序設定找不到變量不工作

一個存儲過程,當我嘗試

DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_prefrences=1 ; 

,並嘗試編譯,它在phpMyAdmin給了一個錯誤。

1193 - 未知系統變量「no_more_prefrences」

我已經使用與另一個存儲過程不同的名稱相同的線。它工作正常。

這是我的存儲過程。

DELIMITER $$ 
DROP PROCEDURE IF EXISTS get_all_children_of_lob$$ 

CREATE PROCEDURE get_all_children_of_lob(
    IN parent_id INT 
) 

BEGIN 

    DECLARE lob_preferenceid INT; 
    DECLARE lob_parentid INT; 
    DECLARE lob_value VARCHAR(100); 
    DECLARE lob_isavailable INT; 
    DECLARE lob_ischildavailable INT; 
    DECLARE lob_isuseradded INT; 

    DECLARE cur CURSOR for select PreferenceID,ParentID,Value,IsAvailable,IsChildAvailable,IsUserAdded from table WHERE ParentID=parent_id ; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_prefrences=1 ; 

    CREATE TEMPORARY TABLE IF NOT EXISTS temp_lob(

      ID int(11) NOT NULL AUTO_INCREMENT, 
      preferenceIDTmp INT(11), 
      parentIDTmp INT(11), 
      valueTmp varchar(255), 
      isAvailableTmp INT(11), 
      isChildAvailableTmp INT(11), 
      isUserAddedTmp INT(11), 
      PRIMARY KEY (ID)  
    ); 

      SET no_more_prefrences=0; 
      OPEN cur; 

      dept_loop:WHILE(no_more_prefrences=0) DO 

        FETCH cur INTO lob_preferenceid,lob_parentid,lob_value,lob_isavailable,lob_ischildavailable,lob_isuseradded; 
        IF no_more_prefrences=1 THEN 
         LEAVE dept_loop; 
        END IF; 

            INSERT INTO temp_lob(preferenceIDTmp,parentIDTmp,valueTmp,isAvailableTmp,isChildAvailableTmp,isUserAddedTmp) 
             VALUES (lob_preferenceid,lob_parentid,lob_value,lob_isavailable,lob_ischildavailable,lob_isuseradded); 

            CALL get_all_children_of_lob(lob_preferenceid); 

      END WHILE dept_loop; 

      CLOSE cur;  

END$$ 
DELIMITER ; 

我不知道爲什麼會出現這種情況,請幫助:(

回答

5

看來局部變量聲明丟失

地址:。

DECLARE no_more_prefrences INT;