如何解决MySQL 光标不适用于日期变量
我有一个 mysql 游标,它在将日期变量与表中的日期列进行比较时不返回任何记录。所有这些都发生在存储过程中。因此:
DECLARE StartDateInterval Date DEFAULT '1997-11-01';
DECLARE EndDateInterval Date DEFAULT '1997-12-31';
DECLARE End_Period Date DEFAULT '1997-12-31';
DECLARE prev_period_tournie_rating CURSOR FOR select PID,Rating,RD from rating where Rating_Date = End_Period;
SET End_Period = (StartDateInterval - interval 1 day);
OPEN prev_period_tournie_rating;
firstloop: LOOP
FETCH prev_period_tournie_rating INTO vPID,PrevRat,PrevRD;
IF done = 1 THEN LEAVE firstloop; END IF;
SET decayedRD = ROUND(`newRD`(PrevRD));
INSERT into rating (PID,RD,Rating_Date,Rating_Type) VALUES (vPID,decayedRD,EndDateInterval,2);
END LOOP;
CLOSE prev_period_tournie_rating;
存储过程中有更多代码被我删除了。在 DECLARE 语句之后,以上所有内容都发生在 WHILE 中。 . .END WHILE 从 1997 年到现在以 2 个月为间隔迭代,因此需要将 End_Period 设为变量而不是编码为单个日期。
当我删除 where 条件时,Cursor 从评级表中检索记录。
我没有在游标 DECLARE 语句中将 End_Period 作为参数传递。似乎有些 mysql 方言允许/要求这样做,有些则不允许。即使我已经尝试将我的方言设置为 MariaDB(它允许参数,但如果我将 End_Period 添加为参数,则会出现错误。
Rating_Date 是表 rating 中的日期列,使用标准的 mysql 格式(YYYY-MM-DD)。
对解决此问题的任何帮助将不胜感激。这是我第一次尝试使用存储过程,事实证明这是一个挑战!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。