Как СОЗДАТЬ СОБЫТИЕ из хранимой процедуры со случайным именем события? - PullRequest
2 голосов
/ 09 марта 2011

Я хочу EXEC из MySQL Хранимая процедура СОЗДАНИЕ СОБЫТИЯ sql.

  • Я не могу использовать PREPARE, потому что CREATE EVENT не разрешен в PREPARE, и я хочу использовать случайное имя, так как мне нужно создать уникальное событие, и мне нужно передать некоторые параметры даты вРаздел 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

Как это сделать в хранимой процедуре?

1 Ответ

1 голос
/ 18 марта 2011

Если вы не можете сделать это напрямую, возможно, вы могли бы хранить надвигающиеся вызовы genRoutes (или что-то еще) в таблице и использовать одно событие для управления следующим вызовом. В любое время, когда вы добавляете в таблицу предстоящих вызовов, если новый вызов выполняется раньше, чем самый быстрый в таблице, вы можете вызвать изменение события для запуска в новое время. Когда событие срабатывает, вызовите все из них, которые готовы, удалите их из таблицы и измените событие так, чтобы оно вызывалось при следующем скорейшем вызове.

В качестве альтернативы вы можете просто вызвать событие, которое будет запускаться каждый час, 15 минут, 5 минут (или что-то еще) и опрашивать таблицу на предмет готовых вызовов.

...