如何使用随机事件名称从存储过程创建事件?

时间:2011-03-09 17:53:00

标签: mysql sql stored-procedures mysql-event

我想从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-社区

如何在存储过程中执行此操作?

1 个答案:

答案 0 :(得分:1)

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

或者,你可以只有一个小时,15分钟,5分钟(或其他)触发的事件,并轮询表格以准备就绪。