2011-04-21 88 views
0

我需要一些帮助,这光标代码:需要有语法错误帮助我的MySQL光标代码

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(DB)5.5 。

回答

1

你需要一个RETURNS条款你CREATE FUNCTION后,像这样:

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

详见this

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

ETA:或者使其成为PROCEDURE而不是this example