问题描述
我需要从存储过程中的登台表中删除记录。然后,我需要将记录插入同一张表中。这必须在使用游标遍历记录之前完成。
DELIMITER //
CREATE PROCEDURE Get_Employee_Records()
BEGIN
DECLARE rollingSum INT DEFAULT 0;
DECLARE theMonth varchar(3);
-- Delete & insert on Employee must be done prior to the select
DECLARE mycursor CURSOR FOR SELECT Tgrowth,TYear,myMONTH FROM Employee;
-- cursor body here
CLOSE mycursor;
END //
DELIMITER ;
当我将我的插入和删除语句放在注释部分时,我得到
Error Code: 1064. 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 'DECLARE mycursor CURSOR FOR SELECT Tgrowth,myMONTH FROM Employee' at line 63
在哪里将插入和删除sql放在过程中的正确位置。我可能可以在一个单独的过程中执行此操作,但是我想知道我是否在这里丢失了一些东西。
解决方法
在begin ... end块声明中,必须在任何其他代码之前出现声明,因此 像这样将光标部分包装在begin..end中(顺便说一句,您需要修复代码)。
begin
DECLARE mycursor CURSOR FOR SELECT Tgrowth,TYear,myMONTH FROM Employee;
-- cursor body here
open mycursor;
CLOSE mycursor;
end;
几乎从来没有理由在sql中使用游标-您确定您的方法合适吗?
,我对MYSQL不太熟悉,但我认为DELETE和INSERT应该在游标声明之后以及在打开和关闭游标之前出现。