0

我正在尝试触发一个 mysql 事件来对现实世界的事件做出反应。

设置:我创建了一个持久事件,并试图从存储过程中重新安排它。

在存储过程中,我计算一个时间戳并将其存储在 l_EndDateTime 中。

  ALTER EVENT MyEvent
  ON SCHEDULE EVERY 4 HOUR STARTS l_EndDateTime
  ON COMPLETION PRESERVE;

这给出了错误 1054,说它不是一个有效的列。

阅读此评论后:

ON SCHEDULE 子句可以使用涉及内置 MySQL 函数和用户变量的表达式来获取它包含的任何时间戳或间隔值。您不能在此类表达式中使用存储例程或用户定义的函数,也不能使用任何表引用;但是,您可以使用 SELECT FROM DUAL。对于 ALTER EVENT 和 CREATE EVENT 语句都是如此。从 MySQL 5.1.13 开始,在这种情况下,特别不允许对存储例程、用户定义函数和表的引用,并且会因错误而失败(参见 Bug #22830)。

我试过这个:

  ALTER EVENT MyEvent
  ON SCHEDULE EVERY 4 HOUR STARTS (SELECT l_EndDateTime FROM DUAL)
  ON COMPLETION PRESERVE;

这给出了不同的错误。

有什么建议么?

4

1 回答 1

1

您需要使用用户变量而不是存储过程级变量

SET @l_EndDateTime = NOW();
ALTER EVENT MyEvent
   ON SCHEDULE EVERY 4 HOUR STARTS @l_EndDateTime
   ON COMPLETION PRESERVE;

那会很好用。

于 2013-06-26T06:17:37.853 回答