メッセージを表示します。
MESSAGE expression [ TYPE { INFO | ACTION | WARNING | STATUS } ] [ TO { CONSOLE | CLIENT [ FOR { CONNECTION conn-id-number [ IMMEDIATE ] | ALL } ] | [ EVENT | SYSTEM ] LOG } [ DEBUG ONLY ] ]
conn-id :integer
TYPE 句 この句は、メッセージタイプを指定します。クライアントアプリケーションでは、メッセージの処理方法を指定します。たとえば、TO CLIENT を指定すると、Interactive SQL は、次のロケーションにメッセージを表示します。
INFO [メッセージ] タブ。INFO がデフォルトです。
ACTION [OK] ボタンのあるウィンドウ。
WARNING [OK] ボタンのあるウィンドウ。
STATUS [メッセージ] タブ。
CONSOLE データベースサーバメッセージウィンドウにメッセージを送信します。データベースサーバメッセージログファイルが指定されている場合は、このファイルにも送信します。CONSOLE がデフォルトです。
CLIENT メッセージをクライアントアプリケーションに送信します。アプリケーションではメッセージの処理方法を決めます。また、この決定のベースとなる情報として TYPE を使用できます。
LOG メッセージを -o オプションで指定されたデータベースサーバメッセージログファイルに送信します。EVENT または SYSTEM を指定すると、メッセージはデータベースサーバメッセージウィンドウ、Windows イベントログ (イベントソース SQLANY 16.0 Admin の下)、32 ビットデータベースサーバ上の UNIX SysLog (SQLANY 16.0 Admin (servername) という名前の下) にも書き込まれます。64 ビットデータベースサーバでは、SQLANY64 16.0 Admin がイベントソースとなります。データベースサーバメッセージログのメッセージは以下のように指定します。
i タイプ INFO または STATUS のメッセージ。
w タイプ WARNING のメッセージ。
e タイプ ACTION のメッセージ。
FOR 句 TO CLIENT が指定されたメッセージの場合、この句はメッセージに関する通知を受信する接続を指定します。デフォルトでは、接続は次回 SQL 文または WAITFOR DELAY 文が実行されたときにメッセージを受信します。
CONNECTION conn-id-number 受信者の接続 ID 番号を指定します。IMMEDIATE を指定すると、SQL 文がいつ実行されるかに関係なく、接続はメッセージを数秒以内に受信します。
ALL 開いているすべての接続がメッセージを受信することを指定します。
DEBUG ONLY この句を使用すると、デバッグメッセージがストアドプロシージャに追加されるかどうか、また debug_messages オプションの設定を変更することによってトリガを有効にするか無効にするかを制御できます。DEBUG ONLY が指定されている場合、MESSAGE 文は、debug_messages オプションが On に設定されている場合にのみ実行されます。
debug_messages オプションを Off に設定している場合、DEBUG ONLY メッセージはパフォーマンスへの影響が小さいため、通常は運用システム上のストアドプロシージャに残すことができます。ただし、頻繁に実行する位置では控え目に使用してください。そうしないと、パフォーマンスがわずかに低下することがあります。
MESSAGE 文は、メッセージを表示します。これには、任意の式を指定できます。句は、メッセージタイプおよびメッセージが表示される場所を指定します。
expression のサイズがデータベースページサイズを超えた場合、expression はデータベースページサイズに収まるようにトランケートされます。データベースに有効なページサイズをチェックするには、PageSize データベースプロパティに対するクエリを実行します (SELECT DB_PROPERTY( 'PageSize' );
)。
MESSAGE...TO CLIENT 文を実行するプロシージャは、接続に関連している必要があります。
たとえば、次の例ではイベントが接続以外で発生しているため、ウィンドウは表示されません。
CREATE EVENT CheckIdleTime TYPE ServerIdle WHERE event_condition( 'IdleTime' ) > 100 HANDLER BEGIN MESSAGE 'Idle server' TYPE WARNING TO CLIENT; END; |
ただし、次の例では、データベースサーバメッセージウィンドウにメッセージが書き込まれます。
CREATE EVENT CheckIdleTime2 TYPE ServerIdle WHERE event_condition( 'IdleTime' ) > 100 HANDLER BEGIN MESSAGE 'Idle server' TYPE WARNING TO CONSOLE; END; |
有効な式には、引用文字列または他の定数、変数、関数を含めることができます。
FOR 句を使用すると、アプリケーションでイベントを明示的にチェックしなくても、データベースサーバ上で検出されたイベントを別のアプリケーションに通知できます。FOR 句が使用されている場合、受信者は、SQL 文を次に実行するときにメッセージを受信します。受信者が現在 SQL 文を実行している場合は、文の完了時にメッセージが受信されます。実行されている文がストアドプロシージャ呼び出しである場合、メッセージは呼び出しが完了する前に受信されます。
アプリケーションがメッセージの送信直後に通知を必要とし、接続が SQL 文を実行していない場合は、複数の WAITFOR DELAY 文を同時に使用するのではなく、IMMEDIATE 句を使用してクライアント通知を実装します。
通常、宛先の接続がデータベースサーバ要求を実行していない場合でも、IMMEDIATE 句を使用して送信されたメッセージは 5 秒未満で配信されます。クライアント接続が 1 秒間に複数の要求を実行した場合、クライアント接続が非常に大きな BLOB データを受信した場合、またはクライアントのメッセージコールバックの実行に 1 秒以上かかった場合、メッセージの配信が遅れる可能性があります。また、複数の IMMEDIATE メッセージを 1 つの接続に 2 秒ごとに送信すると、メッセージの配信が遅れたり、エラーメッセージが生成されたりすることがあります。クライアント接続が切断されると、MESSAGE...IMMEDIATE 文が正常に配信されないことがあります。
IMMEDIATE 句のないメッセージが送信されるのは、クライアントが特定の要求または WAITFOR DELAY 文を実行した場合のみです。そのため、メッセージの配信時間は無制限になります。
IMMEDIATE 句には、SQL Anywhere 11 以降の DBLib、ODBC、または SQL Anywhere JDBC ドライバが必要です。IMMEDIATE 句は、非スレッド型の UNIX クライアントライブラリではサポートされません。IMMEDIATE 句をサポートしない宛先接続にメッセージが送信されると、エラーメッセージが生成されます。MESSAGE 文の実行元と同じ接続に IMMEDIATE メッセージが送信されると、エラーメッセージが生成されます。
MESSAGE 'Please disconnect' TYPE WARNING TO CLIENT FOR CONNECTION 16 IMMEDIATE; |
MESSAGE...TO CLIENT 式は、2048 バイトにトランケートされます。IMMEDIATE 句が指定されて送信されたメッセージの場合、メッセージ式は、接続のパケットサイズと 2048 バイトのうちの小さい方にトランケートされます。
Embedded SQL と ODBC クライアントは、メッセージコールバック関数を介してメッセージを受信します。それぞれの場合に、これらの関数を登録してください。Embedded SQL では、メッセージのコールバックが DB_CALLBACK_MESSAGE パラメータを使用して db_register_a_callback に登録されます。ODBC では、メッセージのコールバックは、SA_REGISTER_MESSAGE_CALLBACK パラメータを使用して SQLSetConnectAttr に登録されます。
FOR 句、TO EVENT LOG 句、TO SYSTEM LOG 句を含む MESSAGE 文を実行するには、SERVER OPERATOR システム権限を持っている必要があります。それ以外の場合、この文について権限は必要ありません。
なし
SQL/2008 ベンダー拡張。
次のプロシージャは、データベースサーバメッセージウィンドウにメッセージを表示します。
CREATE PROCEDURE message_text( ) BEGIN MESSAGE 'The current date and time: ', Now( ); END; |
次の文は、データベースサーバメッセージウィンドウに文字列 The current date and time
を表示し、続けて現在の日付と時刻を表示します。
CALL message_text( ); |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |