mysql - 带游标的小过程,用于在表中自动创建行(MYSQL)

标签 mysql

我创建了一个每月执行一次的事件。这里三个表很重要,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/

相关文章:

类似mysql的查询拉取结果很慢

mysql - SELECT date BETWEEN dates with interval 日期

mysql - creating a temporary table of dates mysteriously "appends"一遍又一遍的数据到临时表?

mysql - 向 MySQL 中的关系添加新记录

MySQL - 如何包含与嵌套选择结果相差 2 行的列?

mysql - 在一种方法中在 hibernate session 中完成的更改对于使用同一 session 中的条件的选择查询来说是不可见的

跨位置的 MySQL 数据库同步

php - 蜜 jar 反垃圾邮件技术。如何为每个站点加载的隐藏字段随机生成一个名称?

php - HTML/PHP/MYSQL - 如何使用 MYSQL 中的 2 个不同字段填充下拉列表

PHP Mysql - 删除按钮不断删除最新行