存储过程MySQL 5.5.16

时间:2017-08-31 09:39:42

标签: mysql stored-procedures

所以我在我的数据库中有一个名为"周"在这里我每年都会这样存储:

table weeks(id, year, num_week, date_min, date_max)

所以本周,这一行看起来像这样: week 36

注意:我的周从周四开始,到周三结束。

由于每周逐行插入一个痛苦,我想为此创建一个存储过程,这就是我想出的:

DELIMITER |
CREATE PROCEDURE proc_insert_weeks()

BEGIN

SELECT year, num_week, date_min, date_max INTO @year, @num_week, @date_min, @date_max
FROM weeks
ORDER BY date_min DESC LIMIT 1;

SET @date_min = DATE_ADD(@date_max INTERVAL 1 DAY);
SET @date_max = DATE_ADD(@date_min INTERVAL 6 DAY);
SET @year= YEAR(@date_min);

IF @num_week < 52 THEN SET @num_week = @num_week + 1;
ELSE SET @num_week = 1;
END IF;

INSERT INTO weeks (year, num_week, date_min, date_max)
VALUES (@year, @num_week, @date_min, @date_max);

END |

DELIMITER ;

所以我的想法是拿下表格的最后一条记录并在日期中添加1周,但我甚至无法粘贴程序的创建。

我在SELECT查询后立即收到错误,有人可以帮我弄清楚我做错了吗?

1 个答案:

答案 0 :(得分:1)

drop PROCEDURE proc_insert_weeks;
DELIMITER |
CREATE PROCEDURE proc_insert_weeks()

BEGIN

SELECT year, num_week, date_min, date_max INTO @year, @num_week, @date_min, @date_max
FROM weeks
ORDER BY date_min DESC LIMIT 1;

SET @date_min = DATE_ADD(@date_max, INTERVAL 1 DAY);
SET @date_max = DATE_ADD(@date_min, INTERVAL 6 DAY);
SET @year= YEAR(@date_min);

IF @num_week < 52 THEN SET @num_week = @num_week + 1;
ELSE SET @num_week = 1;
END IF;

INSERT INTO weeks (year, num_week, date_min, date_max)
VALUES (@year, @num_week, @date_min, @date_max);

END |

DELIMITER ;

您可以尝试以上代码。

你在DATE_ADD函数中犯了错误。你错过了,