Collection Contents Previous Next PDF

ASA SQL Reference

SQL Statements

MESSAGE statement


Description 

Use this statement to display a message.

Syntax 

MESSAGE expression, ...
TYPE { INFO | ACTION | WARNING | STATUS } ]
TO { CONSOLE 
   | CLIENT [ FOR { CONNECTION conn_id ALL } ] 
   | LOG }
DEBUG ONLY ]
]

conn_id : integer

Parameters 

TYPE clause    The TYPE clause only has an effect if the message is sent to the client. The client application must decide how to handle the message. Interactive SQL displays messages in the following locations:

TO clause    This clause specifies the destination of a message:

FOR clause    For messages TO CLIENT, this clause specifies which connections receive notification about the message:

DEBUG ONLY    This clause allows you to control whether debugging messages added to stored procedures and triggers are enabled or disabled by changing the setting of the DEBUG_MESSAGES option. When DEBUG ONLY is specified, the MESSAGE statement is executed only when the DEBUG_MESSAGES option is set to ON.

Note 
DEBUG ONLY messages are inexpensive when the DEBUG_MESSAGES option is set to OFF, so these statements can usually be left in stored procedures on a production system. However, they should be used sparingly in locations where they would be executed frequently; otherwise, they may result in a small performance penalty.
Usage 

The MESSAGE statement displays a message, which can be any expression. Clauses can specify the message type and where the message appears.

The procedure issuing a MESSAGE ... TO CLIENT statement must be associated with a connection.

For example, the message box is not displayed in the following example because the event occurs outside of a connection.

CREATE EVENT CheckIdleTime
TYPE ServerIdle
WHERE event_condition( 'IdleTime' ) > 100
HANDLER
BEGIN
   MESSAGE 'Idle engine' type warning to client;
END;

However, in the following example, the message is written to the server console.

CREATE EVENT CheckIdleTime
TYPE ServerIdle
WHERE event_condition( 'IdleTime' ) > 100
HANDLER
BEGIN
   MESSAGE 'Idle engine' type warning to console;
END;

Valid expressions can include a quoted string or other constant, variable, or function.

The FOR clause can be used to notify another application of an event detected on the server without the need for the application to explicitly check for the event. When the FOR clause is used, recipients receive the message the next time that they execute a SQL statement. If the recipient is currently executing a SQL statement, the message is received when the statement completes. If the statement being executed is a stored procedure call, the message is received before the call is completed.

If an application requires notification within a short time after the message is sent and when the connection is not executing SQL statements, you can use a second connection. This connection can execute one or more WAITFOR DELAY statements. These statements do not consume significant resources on the server or network (as would happen with a polling approach), but permit applications to receive notification of the message shortly after it is sent.

ESQL and ODBC clients receive messages via message callback functions. In each case, these functions must be registered. To register ESQL message handlers, use the db_register_callback function.

ODBC clients can register callback functions using the SQLSetConnectAttr function.

Permissions 

DBA authority is required to execute a MESSAGE statement containing a FOR clause.

Side effects 

None.

See also 
Standards and compatibility 
Examples 
  1. The following procedure displays a message on the server message window:

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

    The statement:

    CALL message_test()

    displays the string The current date and time, and the current date and time, on the database server message window.

  2. To register a callback in ODBC, first declare the message handler:

    void SQL_CALLBACK my_msgproc(
       void *    sqlca,
       unsigned char     msg_type,
       long              code,
       unsigned short    len,
       char*             msg )
    { ... }

    Install the declared message handler by calling the SQLSetConnectAttr function.

    rc = SQLSetConnectAttr(
       dbc,
       ASA_REGISTER_MESSAGE_CALLBACK,
       (SQLPOINTER) &my_msgproc, SQL_IS_POINTER );

Collection Contents Previous Next PDF