大佬教程收集整理的这篇文章主要介绍了带有游标声明的存储过程出错,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在 MysqL 中编写一个存储过程,它以设定的时间间隔从另一个表中获取用户 ID、名称和位置。如果记录不存在,它会创建它,但是如果它确实存在并且“位置”字段不同(ID 和用户名是 PK),那么它会用新位置更新记录。
这是到目前为止的 SP,请注意,这 目前不起作用@H_673_6@。
CREATE PROCEDURE `testTransfer` ()
BEGIN
DECLARE myCUR cursOR FOR SELECT ID,username,LOCATIOn FROM usertable;
DECLARE decID int;
DECLARE decname varchar(70);
DECLARE decLOCATIOn int;
OPEN myCUR;
FETCH NEXT FROM myCUR INTO decID,decname,decLOCATIOn;
WHILE @@FETCH_STATUS = 0;
INSERT INTO users_log (ID,LOCATIOn)
VALUES (decID,decLOCATIOn)
ON DUPliCATE KEY updatE
ID = decID,username = decname,LOCATIOn = decLOCATIOn;
FETCH NEXT FROM myCUR INTO decID,decLOCATIOn;
CLOSE myCUR;
END
实际的错误报告在这一行,并提到等号在该位置无效。
WHILE @@FETCH_STATUS = 0;
虽然可能存在更多问题,但 MysqL Workbench 可能在此问题解决之前不会向我报告这些问题。
有关如何使此存储过程正常工作的任何想法?
看起来好像我混合了语法,正如 P.Salmon 正确指出的那样,我错过了我所遵循的指南的一个关键步骤。这是参考的工作解决方案。
CREATE PROCEDURE `testTransfer` ()
BEGIN
DECLARE finished IntegeR DEFAULT 0;
DECLARE decID int;
DECLARE decname varchar(70);
DECLARE decLOCATIOn int;
DECLARE myCUR cursOR FOR SELECT ID,userName,LOCATIOn FROM usertable;
DECLARE CONTinUE HANDLER FOR NOT FOUND SET finished = 1;
OPEN myCUR;
processQueue: LOOP
FETCH NEXT FROM myCUR INTO decID,decName,decLOCATIOn;
IF finished = 1 THEN LEAVE processQueue;
END IF;
INSERT INTO users_log (ID,LOCATIOn)
VALUES (decID,decLOCATIOn)
ON DUPLICATE KEY updatE
ID = decID,userName = decName,LOCATIOn = decLOCATIOn;
END LOOP processQueue;
CLOSE myCUR;
END
以上是大佬教程为你收集整理的带有游标声明的存储过程出错全部内容,希望文章能够帮你解决带有游标声明的存储过程出错所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。