程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了带有游标声明的存储过程出错大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决带有游标声明的存储过程出错?

开发过程中遇到带有游标声明的存储过程出错的问题如何解决?下面主要结合日常开发的经验,给出你关于带有游标声明的存储过程出错的解决方法建议,希望对你解决带有游标声明的存储过程出错有所启发或帮助;

我正在 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,请注明来意。
标签: