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 (E-O)

 

MESSAGE-Anweisung

Mit dieser Anweisung zeigen Sie eine Meldung an.

Syntax
MESSAGE Ausdruck, ...
[ TYPE { INFO | ACTION | WARNING | STATUS } ]
[ TO { CONSOLE 
   | CLIENT [ FOR { CONNECTION Verbindungs-ID [ IMMEDIATE ] | ALL } ] 
   | [ EVENT | SYSTEM ] LOG }
   [ DEBUG ONLY ] ]
Verbindungs-ID: Ganzzahl
Parameter
  • TYPE-Klausel   Diese Klausel gibt den Meldungstyp an. Zulässige Werte sind INFO, ACTION, WARNING und STATUS. Die Clientanwendung muss entscheiden, wie die Meldung zu verarbeiten ist. Interactive SQL z.B. zeigt Meldungen an folgenden Stellen an:

    • INFO   Das Register "Meldungen". INFO ist der Standardtyp.

    • ACTION   Ein Fenster mit einer OK-Schaltfläche.

    • WARNING   Ein Fenster mit einer OK-Schaltfläche.

    • STATUS   Das Register "Meldungen".

  • TO-Klausel   Diese Klausel gibt das Ziel einer Meldung an:

    • CONSOLE   Meldungen werden an das Meldungsfenster des Datenbankservers und in die Meldungslogdatei des Datenbankservers geschickt, wenn eine definiert wurde. CONSOLE ist der Standardwert.

    • CLIENT   Sendet Meldungen an die Clientanwendung. Ihre Anwendung muss entscheiden, wie die Meldung zu verarbeiten ist. Sie können TYPE als Information verwenden, auf deren Basis diese Entscheidung getroffen werden kann.

    • LOG   Sendet Meldungen an die Serverlogdatei, die durch die Befehlszeilenoption -o angegeben wird. Wenn EVENT oder SYSTEM angegeben ist, wird die Meldung auch an das Meldungsfenster des Datenbankservers übermittelt sowie in die Windows-Ereignisanzeige unter Ereignisquelle SQLANY 11.0 Admin und in das Unix Syslog unter dem Namen SQLANY 11.0 Admin (Servername) eingetragen. Meldungen im Serverlog werden folgendermaßen gekennzeichnet:

      • i   Meldungen vom Typ INFO oder STATUS

      • w   Meldungen vom Typ WARNING

      • e   Meldungen vom Typ ACTION

  • FOR-Klausel   Diese Klausel bestimmt bei TO CLIENT-Nachrichten, welche Verbindungen eine Benachrichtigung zu der Nachricht erhalten. Standardmäßig empfängt die Verbindung die Nachricht, wenn das nächste Mal eine SQL-Anweisung oder eine WAITFOR DELAY-Anweisung ausgeführt wird.

    • CONNECTION Verbindungs-ID   Gibt die Verbindungs-ID des Empfängers an. Wenn IMMEDIATE angegeben ist, erhält die Verbindung die Nachricht innerhalb weniger Sekunden, gleichgültig wann die SQL-Anweisung ausgeführt wird.

    • ALL   Gibt an, dass alle offenen Verbindungen die Nachricht erhalten.

  • DEBUG ONLY   Mit dieser Klausel können Sie kontrollieren, ob Meldungen, die während der Fehlersuche erzeugt werden, in gespeicherten Prozeduren und Triggern aktiviert oder deaktiviert werden. Hierfür ändern Sie die Einstellung für die Option debug_messages. Wenn DEBUG ONLY angegeben ist, wird die MESSAGE-Anweisung nur dann ausgeführt, wenn die Option debug_messages auf ON gesetzt ist.

    Hinweis

    DEBUG ONLY-Meldungen sind kostengünstig, wenn die Option debug_messages auf "Off" gesetzt wurde, sodass diese Anweisungen auf einem Produktionssystem normalerweise in gespeicherten Prozeduren belassen werden können. Dort, wo sie häufig ausgeführt werden würden, sollten Sie jedoch mit Vorsicht eingesetzt werden, weil sonst mit Performance-Einbußen gerechnet werden muss.

Bemerkungen

Die MESSAGE-Anweisung zeigt eine Meldung an, die jeder beliebige Ausdruck sein kann. Mit Klauseln können der Nachrichtentyp und der Ort, wo die Meldung angezeigt wird, festgelegt werden.

Die Prozedur, die eine MESSAGE … TO CLIENT-Anweisung durchführt, muss einer Verbindung zugeordnet sein.

Beispielsweise wird das Meldungsfenster im folgenden Beispiel nicht angezeigt, da das Ereignis außerhalb einer Verbindung auftritt.

CREATE EVENT CheckIdleTime
TYPE ServerIdle
WHERE event_condition( 'IdleTime' ) > 100
HANDLER
BEGIN
   MESSAGE 'Idle engine' TYPE WARNING TO CLIENT;
END;

Im folgenden Beispiel hingegen wird die Meldung im Meldungsfenster des Datenbankservers ausgegeben.

CREATE EVENT CheckIdleTime
TYPE ServerIdle
WHERE event_condition( 'IdleTime' ) > 100
HANDLER
BEGIN
   MESSAGE 'Idle engine' TYPE WARNING TO CONSOLE;
END;

Gültige Ausdrücke können eine Zeichenfolge in Anführungszeichen, eine Konstante, Variable oder Funktion enthalten.

Die FOR-Klausel kann verwendet werden, um eine andere Anwendung über ein Ereignis zu benachrichtigen, das auf dem Datenbankserver entdeckt wurde, ohne dass die Anwendung explizit nach dem Ereignis suchen muss. Wenn die FOR-Klausel verwendet wird, erhalten Empfänger die Nachricht, wenn sie das nächste Mal eine SQL-Anweisung ausführen. Wenn der Empfänger derzeit eine SQL-Anweisung ausführt, erhält er die Nachricht nach Ausführung der Anweisung. Wenn die auszuführende Anweisung ein Aufruf einer gespeicherten Prozedur ist, erhält der Empfänger die Nachricht vor Beendigung des Aufrufs.

Wenn eine Anwendung eine Benachrichtigung innerhalb kurzer Frist nach dem Absenden der Nachricht benötigt und die Verbindung keine SQL-Anweisungen ausführt, verwenden Sie die Klausel IMMEDIATE, um die Clientbenachrichtigung zu implementieren, und nicht mehrere, gleichzeitige WAITFOR DELAY-Anweisungen.

In der Regel werden Nachrichten, die mit der IMMEDIATE-Klausel verwendet werden, in weniger als fünf Sekunden versendet, auch wenn die Zielverbindung keine Datenbankserveranfragen durchführt. Die Nachrichtenzustellung kann verzögert werden, wenn die Clientverbindung mehrere Anfragen pro Sekunde durchführt, sehr umfangreiche BLOB-Daten erhält oder der Nachrichten-Callback des Clients länger als eine Sekunde ausgeführt wird. Außerdem kann das Senden von mehr als einer IMMEDIATE-Nachricht an eine einzige Verbindung alle zwei Sekunden die Nachrichtenzustellung verzögern und eine Fehlermeldung bewirken. Wenn die Clientverbindung getrennt ist, kann eine erfolgreiche MESSAGE ... IMMEDIATE-Anweisung eventuell nicht zugestellt werden werden.

Ohne IMMEDIATE-Klausel versendete Nachrichten werden nur zugestellt, wenn der Client eine spezifische Anforderung oder eine WAITFOR DELAY-Anweisung ausführt. Daher ist die Zustellungszeit von Nachrichten unbegrenzt.

Die IMMEDIATE-Klausel erfordert mindestens eine SQL Anywhere Version 11.0.1 DBLib, ODBC oder iAnywhere JDBC-Clientbibliothek. Die IMMEDIATE-Klausel wird von Unix-Clientbibliotheken ohne Thread nicht unterstützt. Eine Fehlermeldung wird generiert, wenn eine Nachricht an eine Zielverbindung gesendet wird, die die IMMEDIATE-Klausel nicht unterstützt.

Ein MESSAGE ... TO CLIENT-Ausdruck kann auf 2048 Byte gekürzt werden. Für Meldungen, die mit der IMMEDIATE-Klausel gesendet werden, kann der Nachrichtenausdruck auf die Paketgröße der Verbindung oder 2048 Byte gekürzt werden, je nachdem, was kleiner ist.

Embedded SQL- und ODBC-Clients erhalten Nachrichten über Nachrichten-Callbackfunktionen. Diese Funktionen müssen in jedem Fall registriert werden. In Embedded SQL wird das Nachrichten-Callback mit db_register_a_callback mithilfe des DB_CALLBACK_MESSAGE-Parameters registriert. In ODBC wird das Nachrichten-Callback mit SQLSetConnectAttr mithilfe des ASA_REGISTER_MESSAGE_CALLBACK-Parameters registriert.

Berechtigungen

Sie benötigen eine DBA-Berechtigung, um eine MESSAGE-Anweisung auszuführen, die eine FOR-Klausel oder eine TO EVENT LOG- bzw. TO SYSTEM LOG-Klausel enthält.

Nebenwirkungen

Keine.

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

Beispiel

Die folgende Prozedur zeigt ein Meldungsfenster des Datenbankservers an:

CREATE PROCEDURE message_text()
BEGIN
MESSAGE 'The current date and time: ', Now();
END;

Die folgende Anweisung zeigt die Zeichenfolge The current date and time, gefolgt vom aktuellen Datum und der aktuellen Uhrzeit im Meldungsfenster des Datenbankservers an.

CALL message_text();