2

MySQLストアド プロシージャからCREATE EVENT 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-コミュニティ

ストアドプロシージャでこれを行う方法は?

4

1 に答える 1

1

直接実行できない場合は、genRoutes(またはその他)への差し迫った呼び出しをテーブルに格納し、単一のイベントを使用して次の呼び出しを管理できます。差し迫った呼び出しのテーブルに追加するときはいつでも、新しい呼び出しがテーブル内の最も早いものよりも早い場合は、変更を呼び出して、新しい時間にトリガーすることができます。イベントがトリガーされたら、準備ができているすべてのイベントを呼び出し、テーブルから削除し、次に近い呼び出しでトリガーされるようにイベントを変更します。

または、1時間、15分、5分(またはその他)ごとにトリガーするイベントを作成し、テーブルをポーリングして準備ができているコールを探すこともできます。

于 2011-03-18T18:05:59.020 に答える