【问题标题】:How to CREATE EVENT from Stored Procedure with a random event name?如何使用随机事件名称从存储过程创建事件?
【发布时间】:2011-07-12 02:59:00
【问题描述】:

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

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

【问题讨论】:

    标签: mysql sql stored-procedures mysql-event


    【解决方案1】:

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

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

    【讨论】:

    • 生成唯一的 genRoutes 名称真的很困难,因为它们将基于不同的日期范围构建,并且一直在变化。
    猜你喜欢
    • 2013-01-02
    • 2020-10-30
    • 2021-12-31
    • 2011-10-24
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多