2011-03-09 49 views
2

我想从MySQL执行存储过程 CREATE EVENT sql。如何使用随机事件名称从存储过程创建事件?

  • 我不能备使用,因为CREATE EVENT是不允许在准备,我想用一个随机的名字,因为我需要创造一个独特的事件,我需要通过一些日期PARAMS在办节。
  • 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'); 

Server版本5.1.31社区

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

回答

1

如果你不能直接这样做,也许你可以在表中存储对genRoutes(或其他)的即将调用,并使用单个事件来管理下一个调用。任何时候你添加到即将发生的呼叫表中,如果新的呼叫比表中最早的呼叫更早,你可以调用改变事件在新的时间触发。当事件触发时,调用所有已准备好的事件,将它们从表中删除,并更改事件以在下一次最快的呼叫时触发。

或者,您可以只触发一个小时,15分钟,5分钟(或其他)的事件并轮询表以准备调用。

+0

生成唯一的genRoutes名称非常困难,因为它们将根据不断变化的日期范围进行构建。 – Pentium10 2011-03-18 18:30:27