【问题标题】:Insert from select in Cursor - MySQL从光标中的选择插入 - MySQL
【发布时间】:2014-05-31 01:47:32
【问题描述】:

我想知道是否有人可以帮助我处理这个 SP,我不知道为什么,但该过程仅在 de Insert 语句中插入 select 的第一个结果(大约 20 行)。我做错了什么?

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_tine_tb_temp_month`$$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    PROCEDURE `db_sumarizados`.`sp_tine_tb_temp_month`()

    BEGIN
  DECLARE no_more_rows BOOLEAN DEFAULT FALSE;
  DECLARE a CHAR(16);
  DECLARE b DATE;
  DECLARE cur CURSOR FOR SELECT SITE_NE_NAME, DATE FROM unl_tb_ecl_stat_hh WHERE DATE BETWEEN '2014-04-01' AND '2014-04-30' GROUP BY SITE_NE_NAME, DATE HAVING COUNT(*) < 24;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows := TRUE;

  CREATE TEMPORARY TABLE IF NOT EXISTS sitios_elegidos (
  SITE_NE_NAME CHAR(16), FECHA DATE, HORA TIME
  );

  OPEN cur;

  read_loop: LOOP
    FETCH cur INTO a, b;

    IF no_more_rows THEN
      LEAVE read_loop;
    END IF;

    INSERT INTO sitios_elegidos (SITE_NE_NAME, FECHA, HORA) SELECT SITE_NE_NAME, FECHA, HORA FROM time_intervals i LEFT JOIN tb_de_pruebas p ON i.fecha = p.DATE AND i.hora = p.TIME WHERE SITE_NE_NAME = a AND DATE = b;

  END LOOP;

  CLOSE cur;

 END$$

DELIMITER ;

【问题讨论】:

    标签: mysql select insert cursor


    【解决方案1】:
    SET no_more_rows = FALSE;
    

    ...就在...之前...

    END LOOP;
    

    否则,如果您的INSERT ... SELECT 什么也没找到,它可能会在光标实际耗尽之前过早地触发您的CONTINUE 处理程序并将值设置为TRUE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多