2 Stimmen

Wie CREATE EVENT von Stored Procedure mit einem zufälligen Ereignisnamen?

Ich möchte von MySQL aus EXEC Gespeicherte Prozedur ein CREATE EVENT sql.

  • Ich kann PREPARE nicht verwenden, da CREATE EVENT in PREPARE nicht erlaubt ist, und ich möchte einen zufälligen Namen verwenden, da ich ein einmaliges Ereignis erstellen muss, und ich muss einige Datumsparameter im DO-Abschnitt übergeben.
  • MySQL hat kein EXEC.

Das SQL ist wie folgt aufgebaut:

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

Die generierte @sql-Abfrage sieht wie folgt aus:

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 Version 5.1.31-Gemeinschaft

Wie macht man das in einer Stored Procedure?

1voto

Tom Micheline Punkte 851

Wenn Sie das nicht direkt tun können, könnten Sie vielleicht bevorstehende Aufrufe von genRoutes (oder was auch immer) in einer Tabelle speichern und ein einziges Ereignis verwenden, um den nächsten Aufruf zu verwalten. Jedes Mal, wenn Sie die Tabelle mit den anstehenden Aufrufen ergänzen, könnten Sie, wenn der neue Aufruf früher erfolgt als der früheste in der Tabelle, das Ereignis so ändern, dass es zum neuen Zeitpunkt ausgelöst wird. Wenn das Ereignis ausgelöst wird, rufen Sie alle bereitstehenden Anrufe auf, löschen sie aus der Tabelle und ändern das Ereignis so, dass es beim nächstmöglichen Anruf ausgelöst wird.

Alternativ könnten Sie einfach ein Ereignis einrichten, das jede Stunde, 15 Minuten, 5 Minuten (oder wie auch immer) ausgelöst wird und die Tabelle nach fertigen Aufrufen abfragt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X