Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
メッセージを非同期的に受信するために、ml_qa_listener_queue というストアドプロシージャー (queue はメッセージキューの名前) を作成します。
このストアドプロシージャーは他のすべての QAnywhere ストアドプロシージャーとは異なり、デフォルトでは提供されていません。ユーザーがストアドプロシージャー ml_qa_listener_queue (queue はメッセージキューの名前) を作成すると、そのストアドプロシージャーは QAnywhere によって使用されます。
メッセージは接続で同期的に受信できますが、多くの場合は非同期で受信する方が便利です。特定のアドレスを持つメッセージがキューに登録された場合に呼び出されるストアドプロシージャーを作成できます。このプロシージャーの名前は、ml_qa_listener_queue (queue はメッセージキューの名前) にする必要があります。このようなプロシージャーが存在する場合、そのプロシージャーは、指定されたアドレスを持つメッセージがキューに登録されるたびに呼び出されます。
このプロシージャーは別の接続から呼び出されます。このプロシージャーの実行中に SQL エラーが発生しないかぎり、メッセージの確認とコミットは自動的に行われます。
このプロシージャー内では、コミットやロールバックを実行しないでください。
キューの名前は QAnywhere アドレスの一部です。
次の例では、アドレス executesql を持つメッセージがキューに登録されるたびに呼び出されるプロシージャーを作成します。この例のプロシージャーでは、メッセージの内容が、現在のデータベースに対して実行できる SQL 文であるものと想定しています。
CREATE PROCEDURE ml_qa_listener_executesql(IN @msgid VARCHAR(128)) begin DECLARE @execstr LONG VARCHAR; SET @execstr = ml_qa_gettextcontent( @msgid ); EXECUTE IMMEDIATE @execstr; end