MySQL在原存储过程中增加update修改记录行报1064错误请教大神?

DELIMITER $$
USE `default`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`()
BEGIN
UPDATE woic SET seq=comments WHERE seq='000' AND check_passed=0;
DECLARE t_wo VARCHAR(10);
DECLARE t_wi VARCHAR(10);
DECLARE t_seq VARCHAR(10);
DECLARE sum_qty DECIMAL(20,4);
DECLARE sum_rej DECIMAL(20,4);
DECLARE trs_qty DECIMAL(20,4);
DECLARE trs_wo VARCHAR(10) DEFAULT '';
DECLARE trs_wi VARCHAR(10);
DECLARE t_status VARCHAR(25);
DECLARE done INT DEFAULT 0;
DECLARE cur_note CURSOR FOR SELECT wo,wi,seq,SUM(qty),SUM(rej) FROM woic WHERE check_passed<>1 AND labor_type=1 GROUP BY wo,wi,seq;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN cur_note;
WHILE done=0 DO
FETCH cur_note INTO t_wo,t_wi,t_seq,sum_qty,sum_rej;
IF t_wo<>trs_wo OR t_wi<>trs_wi THEN SET trs_qty=sum_qty;
ELSEIF trs_qty<(sum_qty+sum_rej) THEN UPDATE woic SET check_passed=2 WHERE wo=t_wo AND wi=t_wi AND seq=t_seq;
ELSE SET trs_qty=sum_qty;
IF t_status='CLOSED' THEN UPDATE woic SET check_passed=1 WHERE wo=t_wo AND wi=t_wi AND seq=t_seq;
END IF;
END IF;
SET trs_wo=t_wo;
SET trs_wi=t_wi;
END WHILE;
CLOSE cur_note;
SELECT wo,wi,seq,SUM(qty),SUM(rej) FROM woic WHERE check_passed=2 GROUP BY seq;
END$$
DELIMITER ;
​以上是报错时的代码,当把UPDATE woic SET seq=comments WHERE seq='000' AND check_passed=0;这一句移到结尾END$$前时,或者去掉这一句时,存储过程可以执行不报错,请教高手指点?

第1个回答  2020-10-23
1064是SQL的语法错误,最简单最低级的错误而已。
你这个update语句本身就有问题:

UPDATE woic SET seq=comments WHERE seq='000' AND check_passed=0;
这里的comments 应该是传进来的吧?你如果不传进来就要给常量。追问

非常感谢您的解答,但是我是初学几天,您的回答我没有明白,能详细讲一下吗?起初数据列seq都是000,comments列有数据,我需要把comments列的数据赋值给seq,然后执行存储过程。单独执行这句数据更新查询没有问题,但是把这句加入原存储过程就报错了。

本回答被网友采纳
相似回答