この文を使用して、指定した時間の間、または指定の時間になるまで、現在の接続処理を遅らせます。
WAITFOR { DELAY time | TIME time } [ CHECK EVERY integer ] [ AFTER MESSAGE BREAK ]
time : string
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 |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |