得到错误导致存储过程mysql

时间:2017-03-26 13:37:13

标签: mysql stored-procedures

我正在尝试使用SP&获取每个日期的结果我正在使用循环并使用union all附加sql语句,但它正在获取变量日期的最后一个值。

表:

CREATE TABLE `bugs` (
  `id` int(11) DEFAULT NULL,
  `severity` int(11) DEFAULT NULL,
  `open_date` date DEFAULT NULL,
  `close_date` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

SP:

DELIMITER $$
 DROP PROCEDURE IF EXISTS search$$
 CREATE PROCEDURE search(startDate DATE, endDate DATE)
     BEGIN
         DECLARE result  VARCHAR(255);
         SET @iterDate = DATE(startDate);
         SET @result = '';
         label1: LOOP
            SET @result = CONCAT(@result, ' SELECT DATE(@iterDate), count(*) FROM bugs WHERE open_date = DATE(@iterDate) AND close_date > DATE(@iterDate) UNION ALL');
            SET @iterDate = DATE_ADD(@iterDate, INTERVAL 1 DAY);
            IF @iterDate <= DATE(endDate) THEN
                ITERATE label1;
            END IF;
            LEAVE label1;
         END LOOP label1;
         SET @result = LEFT(@result, LENGTH(@result)-LENGTH('UNION ALL'));
         PREPARE stmt FROM @result;
         EXECUTE stmt;
    END$$
DELIMITER ;

这将采用每个日期的日期范围和记录计数。在我的中,它采用最后日期(endDate + 1)来执行最后形成的查询。

1 个答案:

答案 0 :(得分:0)

只需更改@iterDate递增(SET命令)和@iterDate条件检查(IF命令)的顺序。