2011-04-21 86 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