2013-10-03 131 views
0

我沒有得到我的語法錯誤,MySql說未知的系統可執行完成:delimiter |存儲過程繼續處理程序錯誤

CREATE PROCEDURE UPDATELOMON()  
BEGIN 

    DECLARE First_cur CURSOR FOR SELECT oraginal_level,level FROM LOMTEMP; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := TRUE; 

    OPEN First_cur; 

    FirstLoop: LOOP 
    FETCH First_cur INTO oraginal,toupdate; 
    IF done THEN 
    LEAVE FirstLoop; 
    END IF; 

    CALL updt(oraginal,toupdate); 
    END LOOP FirstLoop; 

    CLOSE First_cur; 

END; 

回答

1

您需要在創建存儲過程來更改分隔符:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS UPDATELOMON$$ 
CREATE PROCEDURE UPDATELOMON()  
BEGIN 

    DECLARE First_cur CURSOR FOR SELECT oraginal_level,level FROM LOMTEMP; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := TRUE; 

    OPEN First_cur; 

    FirstLoop: LOOP 
    FETCH First_cur INTO oraginal,toupdate; 
    IF done THEN 
    LEAVE FirstLoop; 
    END IF; 

    CALL updt(oraginal,toupdate); 
    END LOOP FirstLoop; 

    CLOSE First_cur; 

END$$ 
DELIMITER ; 

默認情況下,MySQL的本身識別分號作爲語句分隔符,所以你必須暫時重新定義分隔符導致MySQL來將整個存儲的程序定義傳遞給服務器。否則,在達到END語句之前(在第一個分號上,在你的情況下,在CONTINUE HANDLER語句之前),MySQL會中斷CREATE PROCEDURE。

你可以看到文檔瞭解更多信息: http://dev.mysql.com/doc/refman/5.5/en/stored-programs-defining.html

+0

它爲我,謝謝BTW :) –

+1

太好了,現在你可以接受的答案:)下面是一個解釋如何做到這一點,爲什麼 - HTTP://元。 stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Zagor23

0

在@ Zagor23的答案。你可以刪除$$DROP PROCEDURE...行,並把DELIMITER $$後面。所以,你將有以下:

DROP PROCEDURE IF EXISTS UPDATELOMON; 
DELIMITER $$