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

SQL Anywhere 11.0.1 (日本語) » QAnywhere » QAnywhere リファレンス » QAnywhere SQL API リファレンス » メッセージの管理

 

ml_qa_getmessagenowait

現在キューに登録されている、指定されたアドレスを持つメッセージのうち、次に取り出せるもののメッセージ ID を返します。

パラメータ
項目 説明 備考
1 アドレス VARCHAR(128)
戻り値

VARCHAR(128) 型の メッセージ ID。

キューに登録されている、指定されたアドレスを持つメッセージのうち、次に取り出せるもののメッセージ ID を返します。このアドレスを持つ、キューに登録されたメッセージがない場合は、NULL を返します。

備考

指定された QAnywhere メッセージ・アドレス宛ての待機中のメッセージがあるかどうかを同期的にチェックするには、このストアド・プロシージャを使用します。指定された QAnywhere アドレス宛てのメッセージが発生した場合に、非同期で SQL プロシージャを呼び出すには、Listener を使用します。

メッセージが準備できるまで処理をブロックする方法の詳細については、ml_qa_getmessageml_qa_getmessagetimeoutを参照してください。

返されるメッセージ ID に対応するメッセージが受信されたとみなされるのは、現在のトランザクションがコミットされた後です。受信がコミットされたメッセージは、このストアド・プロシージャやいかなる QAnywhere API でも受信することができません。同様に、現在のトランザクションがロールバックされると、メッセージが受信されていないことを意味します。このため、以降の ml_qa_getmessage の呼び出しで同じメッセージ ID が返される可能性があります。

受信されたメッセージのプロパティと内容は、現在のトランザクションに対してコミットまたはロールバックが実行されるまでの間、各種の ml_qa_get ストアド・プロシージャを使用して読み込むことができます。現在のトランザクションに対してコミットまたはロールバックが実行された時点で、そのメッセージ・データは読み込めなくなります。コミットを実行する前に、メッセージ内の必要なデータを表形式のデータとして、または SQL 変数に保存してください。

参照

次の例では、キューに登録されている、アドレス myaddress を持つメッセージがすべて読み込まれるまで、これらすべてのメッセージの内容を表示します (一般には、各メッセージが読み込まれた後ではなく、最後のメッセージが読み込まれた後でコミットする方が効率的です)。

begin
    declare @msgid varchar(128);
    loop
        set @msgid = ml_qa_getmessagenowait( 'myaddress' );
        if @msgid is null then leave end if;
        message 'a message with content ' || ml_qa_gettextcontent( @msgid ) || ' has been received';
    end loop;
    commit;
end