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 要好。

权限

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