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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (E ~ O)

 

MESSAGE 文

この文は、メッセージを表示するために使用します。

構文
MESSAGE expression, ...
[ TYPE { INFO | ACTION | WARNING | STATUS } ]
[ TO { CONSOLE 
   | CLIENT [ FOR { CONNECTION conn-id [ IMMEDIATE ] | ALL } ] 
   | [ EVENT | SYSTEM ] LOG }
   [ DEBUG ONLY ] ]
conn-id : integer
パラメータ
  • TYPE 句   この句は、メッセージ・タイプを指定します。指定できる値は INFO、ACTION、WARNING、および STATUS です。クライアント・アプリケーションでは、メッセージの処理方法を指定します。たとえば、Interactive SQL は、次のロケーションにメッセージを表示します。

    • INFO   [メッセージ] タブ。INFO がデフォルトです。

    • ACTION   [OK] ボタンのあるウィンドウ

    • WARNING   [OK] ボタンのあるウィンドウ

    • STATUS   [メッセージ] タブ。

  • TO 句   この句は、メッセージの送信先を指定します。

    • CONSOLE   データベース・サーバ・メッセージ・ウィンドウにメッセージを送信します。データベース・サーバ・メッセージ・ログ・ファイルが指定されている場合は、このファイルにも送信します。CONSOLE がデフォルトです。

    • CLIENT   メッセージをクライアント・アプリケーションに送信します。アプリケーションではメッセージの処理方法を決めます。また、この決定のベースとなる情報として TYPE を使用できます。

    • LOG   メッセージを -o オプションで指定されたサーバ・ログ・ファイルに送信します。EVENT または SYSTEM を指定すると、メッセージはデータベース・サーバ・メッセージ・ウィンドウ、Windows イベント・ログ (イベント・ソース SQLANY 11.0 Admin の下)、および UNIX SysLog (SQLANY 11.0 Admin (servername) という名前の下) にも書き込まれます。サーバ・ログのメッセージは以下のように指定します。

      • i   タイプ INFO または STATUS のメッセージ。

      • w   タイプ WARNING のメッセージ。

      • e   タイプ ACTION のメッセージ。

  • FOR 句   TO CLIENT が指定されたメッセージの場合、この句はメッセージに関する通知を受信する接続を指定します。デフォルトでは、接続は次回 SQL 文または WAITFOR DELAY 文が実行されたときにメッセージを受信します。

    • CONNECTION conn-id   受信者の接続 ID を指定します。IMMEDIATE が指定されると、SQL 文がいつ実行されるかに関係なく、接続はメッセージを数秒以内に受信します。

    • ALL   開いているすべての接続がメッセージを受信することを指定します。

  • DEBUG ONLY   この句を使用すると、デバッグ・メッセージがストアド・プロシージャに追加されるかどうか、また debug_messages オプションの設定を変更することによってトリガを有効にするか無効にするかを制御できます。DEBUG ONLY が指定されている場合、MESSAGE 文は、debug_messages オプションが On に設定されている場合にのみ実行されます。

    注意

    debug_messages オプションを Off に設定している場合、DEBUG ONLY メッセージはパフォーマンスへの影響が小さいため、通常は運用システム上のストアド・プロシージャに残すことができます。ただし、頻繁に実行する位置では控え目に使用してください。そうしないと、パフォーマンスがわずかに低下することがあります。

備考

MESSAGE 文は、メッセージを表示します。これには、任意の式を指定できます。句は、メッセージ・タイプおよびメッセージが表示される場所を指定します。

MESSAGE ... TO CLIENT 文を発行するプロシージャは、接続に関連付けられている必要があります。

たとえば、次の例ではイベントが接続以外で発生しているため、ウィンドウは表示されません。

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

ただし、次の例では、データベース・サーバ・メッセージ・ウィンドウにメッセージが書き込まれます。

CREATE EVENT CheckIdleTime
TYPE ServerIdle
WHERE event_condition( 'IdleTime' ) > 100
HANDLER
BEGIN
   MESSAGE 'Idle engine' 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.0.1 か、新しい DBLib、ODBC、または iAnywhere JDBC クライアントライブラリが必要です。IMMEDIATE 句は、非スレッド型の UNIX クライアント・ライブラリではサポートされません。IMMEDIATE 句をサポートしない宛先接続にメッセージが送信されると、エラー・メッセージが生成されます。

MESSAGE ... TO CLIENT 式は、2048 バイトにトランケートされます。IMMEDIATE 句が指定されて送信されたメッセージの場合、メッセージ式は、接続のパケット・サイズと 2048 バイトのうちの小さい方にトランケートされます。

Embedded SQL と ODBC クライアントは、メッセージ・コールバック関数を介してメッセージを受信します。それぞれの場合に、これらの関数を登録してください。Embedded SQL では、メッセージのコールバックが DB_CALLBACK_MESSAGE パラメータを使用して db_register_a_callback に登録されます。ODBC では、メッセージのコールバックが ASA_REGISTER_MESSAGE_CALLBACK を使用して SQLSetConnectAttr に登録されます。

パーミッション

FOR 句、TO EVENT LOG 句、または TO SYSTEM LOG 句を含む MESSAGE 文を実行するには、DBA 権限が必要です。

関連する動作

なし

参照
標準と互換性
  • SQL/2003   ベンダ拡張。

次のプロシージャは、データベース・サーバ・メッセージ・ウィンドウにメッセージを表示します。

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

次の文は、データベース・サーバ・メッセージ・ウィンドウに文字列 The current date and time を表示し、続けて現在の日付と時刻を表示します。

CALL message_text();