Zeigt eine Meldung an.
MESSAGE expression [ TYPE { INFO | ACTION | WARNING | STATUS } ] [ TO { CONSOLE | CLIENT [ FOR { CONNECTION conn-id-number [ IMMEDIATE ] | ALL } ] | [ EVENT | SYSTEM ] LOG } [ DEBUG ONLY ] ]
connection-ID : integer
TYPE-Klausel Diese Klausel gibt den Meldungstyp an. Die Clientanwendung muss entscheiden, wie die Meldung zu verarbeiten ist. Wenn Sie zum Beispiel TO CLIENT angeben, zeigt Interactive SQL 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 in das Meldungsfenster des Datenbankservers geschrieben sowie unter der Ereignisquelle SQLANY 16.0 Admin in das Windows-Ereignisprotokoll und unter dem Namen SQLANY 16.0 Admin (servername) in das Unix-Syslog auf 32-Bit-Datenbankservern. Auf 64-Bit-Datenbankservern ist SQLANY64 16.0 Admin die Ereignisquelle. 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 conn-id-number 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 expression die Seitengröße der Datenbank überschreitet, wird expression 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 ausfü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 CheckIdleTime2 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.
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 ausführt.
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.
Wenn Sie eine MESSAGE-Anweisung ausführen möchten, die eine FOR-Klausel, eine TO EVENT LOG-Klausel oder eine TO SYSTEM LOG-Klausel enthält, benötigen Sie das SERVER OPERATOR-Systemprivileg. Andernfalls sind für diese Anweisung keine Privilegien erforderlich.
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 © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |