如何调试 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 5.5。
I have an error with this cursor code:
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
//
I'm getting this error:
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
I use MySQL 5.5.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您在
CREATE FUNCTION
之后需要一个RETURNS
子句,如下所示:请参阅此 了解详细信息。
不要忘记添加匹配的
RETURN
语句并在末尾将分隔符设置回;
。 :)ETA:或者将其设为
PROCEDURE
,如 这个例子。You need a
RETURNS
clause after yourCREATE FUNCTION
, like this:See this for details.
Don't forget to add a matching
RETURN
statement and to set your delimiter back to;
at the end. :)ETA: Or make it a
PROCEDURE
instead, as in this example.