2015-04-22 4 views
-1

Я получаю следующее сообщение об ошибке, и я не знаю, почему:Синтаксическая ошибка на запятой в процедуре MySQL

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 код с заявлением

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

это успех –

Смежные вопросы