如何在我的MySQL游标代码中调试语法错误?

时间:2011-04-21 14:32:27

标签: mysql cursor

我对此光标代码有错误:

delimiter//
CREATE FUNCTION updateOrder()
DETERMINISTIC
BEGIN
DECLARE done INT DEFAULT 0;
# déclare les variables qui vont accueillir les données retournées par la requête
DECLARE i_id_produit INTEGER;
DECLARE old_id_produit INTEGER;
DECLARE cpt INTEGER;
# déclare le curseur
DECLARE ccustomers CURSOR FOR SELECT id_produit
FROM produit_documentation order by id_produit;
# déclare un handler pour détecter la fin du jeu d'enregistrements
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
# ouvre le curseur
OPEN ccustomers;
REPEAT
FETCH ccustomers INTO i_id_produit;
IF i_id_produit = old_customer_id THEN
UPDATE produit_documentation SET ordre = cpt;
cpt++;
ELSE old_customer_id = i_id_produit;
END IF;
UNTIL done END REPEAT;
END
//

我收到了这个错误:

Script line: 2  You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 
'DETERMINISTIC
BEGIN
DECLARE done INT DEFAULT 0;
# déclare les variables qui ' at line 2

我使用MySQL 5.5。

1 个答案:

答案 0 :(得分:1)

您的RETURNS之后需要CREATE FUNCTION条款,如下所示:

DELIMITER //
CREATE FUNCTION updateOrder() RETURNS varchar(255)
DETERMINISTIC
...

有关详细信息,请参阅this

不要忘记添加匹配的RETURN语句,并在结尾处将分隔符设置回;。 :)

ETA:或者改为PROCEDURE,如同this example