Zeigt eine Meldung an.
MESSAGE Ausdruck [ TYPE { INFO | ACTION | WARNING | STATUS } ] [ TO { CONSOLE | CLIENT [ FOR { CONNECTION Verbindungs-ID-Nummer [ IMMEDIATE ] | ALL } ] | [ EVENT | SYSTEM ] LOG } [ DEBUG ONLY ] ]
Verbindungs-ID: Ganzzahl
TYPE-Klausel Diese Klausel gibt den Meldungstyp an. Die Clientanwendung muss entscheiden, wie die Meldung zu verarbeiten ist. Interactive SQL z.B. zeigt Meldungen an folgenden Stellen an:
INFO Die Registerkarte Meldungen. INFO ist der Standardtyp.
ACTION Ein Fenster mit einer OK-Schaltfläche.
WARNING Ein Fenster mit einer OK-Schaltfläche.
STATUS Die Registerkarte 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 Datenbankserver-Meldungslogdatei, die durch die Option -o angegeben wird. Wenn EVENT oder SYSTEM angegeben ist, wird die Meldung auch an das Meldungsfenster des Datenbankservers übermittelt sowie unter der Ereignisquelle SQLANY 12.0 Admin an die Windows-Ereignisanzeige und unter dem Namen SQLANY 12.0 Admin (Servername) an das Unix-Syslog. Meldungen im Datenbankserver-Meldungslog 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-Nummer Gibt die Verbindungs-ID-Nummer 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.
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.
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.
Wenn die Größe von Ausdruck die Seitengröße der Datenbank überschreitet, wird Ausdruck auf die Seitengröße der Datenbank gekürzt. Um die für die Datenbank geltende Seitengröße zu überprüfen, können Sie die Datenbankeigenschaft
PageSize abfragen (SELECT DB_PROPERTY( 'PageSize' );
).
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 server' 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 server' 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 einen DBLib, ODBC, oder SQL Anywhere JDBC-Treiber der Version SQL Anywhere 11 oder später. 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. Eine Fehlermeldung wird generiert, wenn eine IMMEDIATE-Nachricht an die dieselbe Verbindung gerichtet ist, die die MESSAGE-Anweisung ausgibt.
MESSAGE 'Please disconnect' TYPE WARNING TO CLIENT FOR CONNECTION 16 IMMEDIATE; |
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 SA_REGISTER_MESSAGE_CALLBACK-Parameters registriert.
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.
Keine.
SQL/2008 Erweiterung des Herstellers.
Die folgende Prozedur zeigt eine Nachricht im 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( ); |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |