2015-04-22 31 views
-1

我收到以下錯誤,我不知道爲什麼:語法錯誤

1064 - 你在你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,在正確的語法附近使用 ';

DELIMITER $$ 

CREATE PROCEDURE staffnewid_all() 
BEGIN 
DECLARE x int; 
DECLARE y int; 
DECLARE z int; 

DECLARE charid varchar; 
DECLARE a int; 
DECLARE b int; 

DROP TEMPORARY TABLE IF EXISTS cms_psm.temp_nostaf; 

CREATE TEMPORARY TABLE IF NOT EXISTS cms_psm.temp_nostaf (tempid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, char_id varchar(1)); 

INSERT INTO cms_psm.temp_nostaf (char_id) SELECT DISTINCT(LEFT(nostaf, 1)) FROM staf_new_no; 

SET a = (SELECT min(tempid) FROM cms_psm.temp_nostaf ORDER BY tempid); 
SET b = (SELECT COUNT(tempid) FROM cms_psm.temp_nostaf); 


WHILE a<=b DO 

SET charid = (SELECT char_id FROM cms_psm.temp_nostaf WHERE tempid=a); 

SET x = (SELECT count(*) FROM staf_peribadi WHERE nostaf LIKE CONCAT('%', charid, '%') ORDER BY nostaf ASC); 
SET y = (SELECT min(id) FROM staf_new_no WHERE nostaf LIKE CONCAT('%', charid, '%') ORDER BY nostaf ASC); 
SET z = 1; 



WHILE z<=x DO 
    UPDATE staf_new_no SET nostaf_new = CONCAT(charid, LPAD(z, 6, '0')) WHERE id=y; 
    SET z = z + 1 ; 
    SET y = y + 1 ; 
END WHILE; 

SET a = a + 1 ; 

END WHILE; 

END 
+0

查詢後會發生什麼?您從不使用'$$'來顯示過程的結束,並且您從不將分隔符設置回分號。我懷疑其中一件事正在給你帶來麻煩。 – AdamMc331

回答

0

末用語句代碼

END;$$ 
Delimiter ; 

它的工作原理

0

其實我忘了這

DECLARE charid varchar; 

應該

DECLARE charid varchar(1); 

感謝您的幫助

0
BEGIN 
DECLARE x int; 
DECLARE y int; 
DECLARE z int; 
DECLARE a int; 
DECLARE b int; 
DECLARE charid varchar(1); 

DROP TEMPORARY TABLE IF EXISTS temp_nostaf; 

CREATE TEMPORARY TABLE IF NOT EXISTS temp_nostaf (tempid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, char_id varchar(1)); 

INSERT INTO temp_nostaf (char_id) SELECT DISTINCT(LEFT(nostaf, 1)) FROM staf_new_no; 

SET a = (SELECT min(tempid) FROM cms_psm.temp_nostaf ORDER BY tempid); 
SET b = (SELECT COUNT(tempid) FROM cms_psm.temp_nostaf); 


WHILE a<=b DO 

SET charid = (SELECT char_id FROM cms_psm.temp_nostaf WHERE tempid=a); 

SET x = (SELECT count(*) FROM staf_peribadi WHERE nostaf LIKE CONCAT('%', charid, '%') ORDER BY nostaf ASC); 
SET y = (SELECT min(id) FROM staf_new_no WHERE nostaf LIKE CONCAT('%', charid, '%') ORDER BY nostaf ASC); 
SET z = 1; 



WHILE z<=x DO 
    UPDATE staf_new_no SET nostaf_new = CONCAT(charid, LPAD(z, 6, '0')) WHERE id=y; 
    SET z = z + 1 ; 
    SET y = y + 1 ; 
END WHILE; 

SET a = a + 1 ; 

END WHILE; 

END 
+0

這是成功的 –