2

我想从 MySQL存储过程中执行一个 CREATE EVENT sql。

  • 我不能使用 PREPARE,因为 PREPARE 中不允许 CREATE EVENT,我想使用随机名称,因为我需要创建一个唯一的事件,并且我需要在 DO 部分传递一些日期参数。
  • MySQL 没有 EXEC。

SQL是这样构建的:

SET @sql=CONCAT('CREATE EVENT myevent',md5(concat(@dt1,@dt2)),' ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 0 SECOND
                 DO
                    call genRoutes(''',@dt1,''',''',@dt2,''');
                 ');

生成的@sql 查询如下所示:

CREATE EVENT myeventcadb1e41722fb3c9b2e6992e740d76ca ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 0 SECOND
DO
   call genRoutes('2011-04-07 00:00:00','2011-04-14 00:00:00');

服务器版本 5.1.31-community

如何在存储过程中做到这一点?

4

1 回答 1

1

如果您不能直接执行此操作,也许您可​​以将即将调用的 genRoutes(或其他)存储在一个表中,并使用单个事件来管理下一个调用。每当您添加到即将发生的呼叫表中时,如果新呼叫早于表中的最快呼叫,您可以调用 alter event 在新时间触发。当事件触发时,调用所有准备好的事件,将它们从表中删除,并更改事件以在下一次最快调用时触发。

或者,您可以设置一个每小时、15 分钟、5 分钟(或其他任何时间)触发的事件,然后轮询表以获取就绪调用。

于 2011-03-18T18:05:59.020 回答