Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (P ~ Z)

 

WAITFOR 文

この文を使用して、指定した時間の間、または指定の時間になるまで、現在の接続処理を遅らせます。

構文
WAITFOR { 
DELAY time 
| TIME time }
[ CHECK EVERY integer ]
[ AFTER MESSAGE BREAK ]
time : string
パラメータ
  • DELAY 句   DELAY を使用すると、処理は特定の期間だけ中断されます。

  • TIME 句   TIME を指定すると、データベース・サーバ時刻が指定の時刻に達するまで、処理が中断されます。現在のサーバ時刻が指定の時刻より後の場合は、翌日のその時刻になるまで処理が中断されます。

  • CHECK EVERY 句   このオプション句は、WAITFOR 文が起動する頻度を制御します。デフォルトでは、5 秒ごとに起動します。値はミリ秒単位であり、最小値は 250 ミリ秒です。

  • AFTER MESSAGE BREAK 句   WAITFOR 文を使用して、別の接続からのメッセージを待つことができます。ほとんどの場合、メッセージが受信されると、WAITFOR 文を実行したアプリケーションに転送され、WAITFOR 文は待機を継続します。AFTER MESSAGE BREAK 句が指定されている場合、別の接続からのメッセージが受信されると、WAITFOR 文が完了します。メッセージ・テキストはアプリケーションに転送されませんが、MessageReceived 接続プロパティの値を取得してアクセスできます。

    MessageReceived プロパティの詳細については、接続プロパティを参照してください。

備考

WAITFOR 文は、定期的 (デフォルトでは 5 秒おき) に起動して、キャンセルされたかどうか、またはメッセージが受信されたかどうかをチェックします。どちらも発生していない場合、文は待機を継続します。

WAITFOR は、次の文の代わりに使用できます。

CALL java.lang.Thread.sleep( <time_to_wait_in_millisecs> );

スケジュールされたイベントはそれ専用の接続で実行されるため、通常は WAITFOR TIME よりスケジュールされたイベントを使用することをおすすめします。

パーミッション

なし

関連する動作

この文の実装は、待機中にワーカ・スレッドを使用します。-gn データベース・オプションで指定されたスレッドの 1 つが使用されます (デフォルトのスレッド数は 20 です)。

参照
標準と互換性
  • SQL/2003   ベンダ拡張。

次の例は 3 秒だけ待機します。

WAITFOR DELAY '00:00:03';

次の例は 0.5 秒 (500 ミリ秒) だけ待機します。

WAITFOR DELAY '00:00:00:500';

次の例は午後 8 時まで待機します。

WAITFOR TIME '20:00';

次の例では、接続 1 の WAITFOR 文は、接続 2 からメッセージを受信すると完了します。

// connection 1:
BEGIN
  DECLARE msg LONG VARCHAR;
  LOOP  // forever
    WAITFOR DELAY '00:05:00' AFTER MESSAGE BREAK;
    SET msg = CONNECTION_PROPERTY('MessageReceived');
    IF msg != '' THEN
      MESSAGE 'Msg: ' || msg TO CONSOLE;
    END IF;
  END LOOP
END;
// connection 2:
MESSAGE 'here it is' FOR connection 1