我创建了一个每月执行一次的事件。这里三个表很重要,Cuota(费用)、Alumno(学生)和 CuotaxAlumno(每个学生的费用)。
我的目标是每月在 Cuota(fee) 表中创建一行,然后使用该费用为每个学生创建一个付款行(在 CuotaxAlumno 表中)。
我在 FETCH 行第 19 行遇到语法错误,但我没有发现问题。我将非常感谢您的帮助。
现在正在工作。代码已于 2017 年 4 月 13 日更新,谢谢!
DELIMITER $$
CREATE PROCEDURE crearCuotas()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE referenciaMonto INT;
DECLARE referenciaAlumno INT;
DECLARE referenciaCuota INT;
DECLARE fecha DATE;
DECLARE cursorAlumno CURSOR FOR SELECT idAlumno FROM alumno WHERE idEstado=1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
SET referenciaMonto = (SELECT idMontoCuota FROM montocuota ORDER BY idMontoCuota DESC LIMIT 1);
SET fecha = CURDATE();
INSERT INTO cuota (idMontoCuota, fecha) VALUES(referenciaMonto, fecha);
SET referenciaCuota = (SELECT idCuota FROM cuota ORDER BY idCuota DESC LIMIT 1);
OPEN cursorAlumno;
fetch_loop: LOOP
FETCH cursorAlumno INTO referenciaAlumno;
IF done THEN
LEAVE fetch_loop;
END IF;
INSERT INTO cuotaxalumno(idAlumno, idCuota, idEstado) VALUES(referenciaAlumno, referenciaCuota, 5);
END LOOP;
CLOSE cursorAlumno;
END;
DELIMITER ;
最佳答案
您需要添加循环标签:
CREATE PROCEDURE crearCuotas()
BEGIN
/* yada */
OPEN cursorAlumno;
fetch_loop: LOOP
FETCH cursorAlumno INTO referenciaAlumno;
IF done THEN
LEAVE fetch_loop;
END IF;
INSERT INTO cuotaxalumno (idAlumno, idCuota, idEstado)
VALUES (referenciaAlumno, referenciaCuota, 5);
END LOOP;
CLOSE cursorAlumno;
END;
这是因为虽然创建循环不需要标签,但it is required for the leave statement.
关于mysql - 带游标的小过程,用于在表中自动创建行(MYSQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43369583/