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;