2017-07-14 38 views
0

我正試圖在MySQL工作臺版本6.3上創建一個存儲過程。
我收到一條警告,在我的程序代碼的第3行中缺少分號,但它在那裏。爲什麼MySQL工作臺告訴我分號丟失?

這是響應我得到:

錯誤代碼:1064您的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法 在3

線附近使用「」發生了什麼事的 手冊?

CREATE PROCEDURE MigrateDescription() 
BEGIN 
    DECLARE counter int; 
    DECLARE abhid varchar(20); 
    DECLARE text_d varchar(50); 
    DECLARE text_e varchar(50); 
    DECLARE curs CURSOR FOR SELECT `abhaengigkeit`.`AbhId`, `abhaengigkeit`.`Text_D`, `abhaengigkeit`.`Text_E` FROM `p16altdatentest`.`abhaengigkeit`; 
    OPEN curs; 

    REPEAT 
     FETCH curs INTO abhid, text_d, text_e; 

     INSERT INTO `paragraph16`.`description` 
      (`languageId`,`textKey`,`text`,`isDeleted`,`changedBy`,`changeDate`) 
      VALUES 
      (1, CONCAT('Dependancy_', REPLACE(abhid, '_', '')), text_d, 0, NULL, CURRENT_TIMESTAMP); 
     INSERT INTO `paragraph16`.`description` 
      (`languageId`,`textKey`,`text`,`isDeleted`,`changedBy`,`changeDate`) 
      VALUES 
      (2, CONCAT('Dependancy_', REPLACE(abhid, '_', '')), text_e, 0, NULL, CURRENT_TIMESTAMP); 
    END REPEAT 
END 
+0

嘗試'DECLARE counter int(11);' – EvgenyKolyakov

+0

當您運行代碼時,MySQL服務器是否報告任何錯誤? – axiac

+0

** _ @ OP _ **:您最好發佈WB中的_exact錯誤堆棧thrown_ WB –

回答

2

MySQL Workbench將代碼原樣發送到服務器。

MySQL使用;作爲語句分隔符。當它在第3行遇到;時,它認爲以CREATE PROCEDURE開頭的語句結束,並且後面跟着許多其他語句。您發佈的代碼的前三行肯定不是有效的CREATE PROCEDURE聲明。

正如在documentation中所解釋的,爲了在BEGIN..END compound statement的正文中使用;,需要將語句分隔符臨時更改爲不同的字符或字符序列。

更改語句分隔符的命令是DELIMITER,後面跟着要使用的新分隔符。它不需要使用當前分隔符終止;只需要一個人就夠了。

附上你的代碼兩次調用DELIMITER(設置一個新的,然後恢復;作爲分隔符):

DELIMITER // 
CREATE PROCEDURE MigrateDescription() 
BEGIN 
    -- The content of your procedure here, using ; as statement delimiter 
END 
//    -- This is where the CREATE PROCEDURE statement ends 
DELIMITER ; -- Restore the default delimiter 

這是標準MySQL的方法來創建例程,觸發器等語句包括compound statements。如果例程或觸發器主體僅包含一條語句(內部不包含;),則不需要。

相關問題