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

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (P-Z)

 

WAITFOR-Anweisung

Mit dieser Anweisung wird die Verarbeitung im Rahmen der aktuellen Verbindung für einen bestimmten Zeitraum oder bis zu einem bestimmten Zeitpunkt verzögert.

Syntax
WAITFOR { DELAY Uhrzeit | TIME Uhrzeit }
[ CHECK EVERY Ganzzahl ]
[ AFTER MESSAGE BREAK ]
Uhrzeit : Zeichenfolge
Parameter
  • DELAY-Klausel   Wenn DELAY verwendet wird, unterbricht das System die Verarbeitung für das angegebene Intervall.

  • TIME-Klausel   Wenn TIME angegeben wird, unterbricht das System die Verarbeitung, bis die Datenbankserverzeit den angegebenen Zeitpunkt erreicht. Wenn die angegebene Serverzeit die angegebene Zeit überschreitet, wird die Verarbeitung bis zum selben Zeitpunkt des folgenden Tages unterbrochen.

  • CHECK EVERY-Klausel   Diese optionale Klausel steuert, wie oft die WAITFOR-Anweisung aktiviert wird. Standardmäßig wird sie alle 5 Sekunden aktiviert. Der Wert wird in Millisekunden angegeben, und der Mindestwert beträgt 250 Millisekunden.

  • AFTER MESSAGE BREAK-Klausel   Die WAITFOR-Anweisung kann zum Warten auf eine Nachricht von einer anderen Verbindung verwendet werden. Wenn eine Nachricht empfangen wird, wird sie in den meisten Fällen an die Anwendung weitergeleitet, die die WAITFOR-Anweisung ausgeführt hat, und die WAITFOR-Anweisung wartet weiter. Wenn die AFTER MESSAGE BREAK-Klausel angegeben ist und eine Nachricht von einer anderen Verbindung empfangen wird, schließt die WAITFOR-Anweisung die Ausführung ab. Der Nachrichtentext wird nicht an die Anwendung weitergeleitet, aber Sie können auf ihn zugreifen, indem Sie die MessageReceived-Verbindungseigenschaft verwenden.

    Weitere Hinweise zur MessageReceived-Eigenschaft finden Sie unter Verbindungseigenschaften.

Bemerkungen

Die WAITFOR-Anweisung wird regelmäßig aktiviert (standardmäßig alle 5 Sekunden), um zu überprüfen, ob sie abgebrochen wurde oder ob Nachrichten empfangen wurden. Wenn keines von beiden eingetreten ist, wartet die Anweisung weiter.

WAITFOR ist eine Alternative zur folgenden Anweisung:

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

Da geplante Ereignisse auf ihrer eigenen Verbindung ausgeführt werden, sind geplante Ereignisse oft eine bessere Wahl als die Verwendung von WAITFOR TIME.

Berechtigungen

Keine

Nebenwirkungen

Die Implementierung dieser Anweisung verwendet beim Warten einen Worker-Thread. Damit wird einer der mit der Datenbankoption -gn festgelegten Worker-Threads verwendet (Standardwert ist 20 Threads).

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Erweiterung des Herstellers

Beispiele

Mit dem folgenden Beispiel wird eine Wartezeit von drei Sekunden festgelegt:

WAITFOR DELAY '00:00:03';

Mit dem folgenden Beispiel wird eine Wartezeit von 0,5 Sekunden (500 Millisekunden) festgelegt:

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

Mit dem folgenden Beispiel wird festgelegt, dass die Verarbeitung bis 20 Uhr warten soll:

WAITFOR TIME '20:00';

Im folgenden Beispiel schließt die WAITFOR-Anweisung der 'connection 1' die Ausführung ab, wenn sie die Nachricht von 'connection 2' empfängt:

// 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