WebSphere MQ によるメッセージの取り出し
WebSphere® MQ を使用すると、プログラムでのメッセージの読み取りまたは受信が可能になります。 読み取りと受信のどちらの操作を行っても、キューの先頭にあるメッセージが返されます。 ただし、読み取り操作ではメッセージはキューから除去されませんが、受信操作では除去されます。
受信操作を使用して取り出されるメッセージは一度しか取り出すことができないのに対して、読み取り操作を使用して取り出されるメッセージは、同じメッセージを何度でも取り出すことができます。
次の SQL ステートメントは、デフォルトのサービスとポリシーで指定されたキューの先頭のメッセージを読み取ります。
SQL ステートメントは、VARCHAR(32000) ストリングを返します。
読み取るメッセージがない場合、NULL 値が返されます。
MQREAD はキューを変更しないので、COMMIT ステートメントを使用する必要はありません。
VALUES MQREAD()
次の SQL ステートメントにより、キューの内容は結果セットとして返されます。
表関数の結果表 T は、デフォルト・サービスで定義されたキュー内のすべてのメッセージと、それらのメッセージに関するメタデータで構成されます。
マテリアライズ結果表の最初の列はメッセージ自体で、残りの列にはメタデータが入ります。
SELECT ステートメントは、メッセージとメタデータの両方を返します。
SELECT T.*
FROM TABLE ( MQREADALL() ) AS T;
次のステートメントは、メッセージだけを返します。
表関数の結果表 T は、デフォルト・サービスで定義されたキュー内のすべてのメッセージと、それらのメッセージに関するメタデータで構成されます。
SELECT T.MSG
FROM TABLE ( MQREADALL() ) AS T;
次の SQL ステートメントは、キューの先頭にあるメッセージを受信 (除去) します。
SELECT ステートメントは、VARCHAR(32000) ストリングを返します。
この MQRECEIVE 関数はトランザクションの下で実行されるため、COMMIT ステートメントを実行すると、メッセージは確実にキューから除去されます。
取り出すメッセージがない場合、NULL 値が返されて、キューは変更されません。
VALUES MQRECEIVE()
COMMIT;
MESSAGES 表があり、そこに VARCHAR(32000) の列が 1 つ含まれると想定します。
次の SQL INSERT ステートメントは、デフォルト・サービス・キュー内のすべてのメッセージを MESSAGES 表に挿入します。
INSERT INTO MESSAGES
SELECT T.MSG
FROM TABLE ( MQRECEIVEALL() ) AS T;
COMMIT;