此语句用于将当前连接的处理推迟指定的时间长度,或推迟到特定的时间。
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 要好。
None
此语句的实现在等待时使用工作线程。这会消耗由 -gn 数据库选项指定的线程(缺省值为 20 个线程)之一。
SQL/2003 服务商扩充。
下面的示例等待 3 秒钟:
WAITFOR DELAY '00:00:03'; |
以下示例等待 0.5 秒钟(500 毫秒):
WAITFOR DELAY '00:00:00:500'; |
以下示例一直等到晚上 8 点:
WAITFOR TIME '20:00'; |
在以下示例中,当收到来自连接 2 的消息时,连接 1 的 WAITFOR 语句完成:
// 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 |