機械翻訳について

A PGM、PGM_UTL8およびPGM_SUPパッケージ

Visual Workbenchを使用して、ゲートウェイを介してWebSphere MQにアクセスするアプリケーションを開発します。 Visual Workbenchは、WebSphere MQにアクセスするインタフェースを定義し、OracleアプリケーションがゲートウェイとインタフェースするためのPL/SQLコード(MIP)を自動的に生成します。 ビジュアル・ワークベンチの詳細は、「Oracle Procedural Gateway Visual Workbench for WebSphere MQインストレーションおよびユーザー・ガイドfor Microsoft Windows (32ビット)」を参照してください。

MIPでは、PGMPGM_UTL8および PGM_SUPパッケージの定義が使用されます。 必要に応じ、MIPを変更してVisual WorkbenchでサポートされていないWebSphere MQ関数を含めることができます。 これを行うには、PGMPGM_UTL8およびPGM_SUPパッケージの定義とプロシージャを使用します。

PGMPGM_UTL8およびPGM_SUPパッケージは、Visual WorkbenchリポジトリまたはDG4MQデプロイメント環境の作成時にインストールされます。

次の各トピックでは、PGMPGM_UTL8およびPGM_SUPパッケージについて説明します:

A.1 PGMパッケージ、DG4MQゲートウェイ・プロシージャおよびデータ型定義

PGMパッケージのゲートウェイ・プロシージャおよびタイプ定義は、WebSphere MQ MQIコールの後にモデル化されます。

MQIにあるすべての関連コールおよび構造について、対応するものがPGMに存在し、関連するデータ型定義がpgmobj.sqlに存在します。 ゲートウェイ・プロシージャおよびPGM型の定義には、対応するMQIと同じ名前が付けられます。 ただし、引数または構造体フィールドのデータ型は、対応するPL/SQLデータ型に変更されます。

これらのOracleアプリケーション内のプロシージャおよび型定義は、WebSphere MQアプリケーションの記述にとても類似しています。 すべてのPGM型定義のフィールドが初期化されます。 これらの初期化値は、MQIにより定義されるデフォルト値に基づきます。

ゲートウェイ・プロシージャおよびPGM型定義を使用するには、一般的にMQIおよびWebSphere MQプログラミングに関する豊富な知識が必要です。 これらのプロシージャおよびレコードは、MQIフローチャート、セマンティックおよび構文ルールに従います。

PGMパッケージは、Visual WorkbenchリポジトリまたはDG4MQデプロイメント環境の作成時にインストールされ、パブリック・アクセス権が付与されます。 ゲートウェイは、プロシージャを記述または実行する際にすべてのスキーマ名を省略するため、このパッケージにスキーマはありません。 スキーマ修飾子を、プロシージャおよび型定義の名前に接頭辞として加える必要はありません。

関連項目:

WebSphere MQアプリケーションの記述およびMQIコールの使用の詳細は、IBM 「MQSeriesアプリケーション・プログラミング・リファレンス」を参照してください。

A.1.1 プロシージャおよび型定義の概要

ゲートウェイ・プロシージャおよびPGMには、次のプロシージャおよびタイプ定義があります。

表A-1 プロシージャおよび型定義

手順 プロシージャの目的 プロシージャで使用する型定義

MQOPEN

キューをオープンします。

PGMMQODおよびPGMMQOH

MQPUT

MQOPENによってオープンされたキューにメッセージを送信

PGM.MQMD

PGM.MQOH

PGM.MQPMO

MQPUT

32767バイトより長いメッセージをキューに送信します。

PGM.MQMD

PGM.MQOH

PGM.MQPMO

PGM.MQPUT_BFFER

MQGET

MQOPENによってオープンされたキューからメッセージを取得またはスキャン

PGM.MQMD

PGM.MQOH

PGM.MQGMO

MQGET

32767バイトより長いメッセージをキューに送信します。

PGM.MQMD

PGM.MQOH

PGM.MQGMO

PGM.MQGET_BFFER

MQCLOSE

MQOPENによってオープンされたキューを閉じます

型定義を使用しません。

A.1.2 プロシージャの表記規則

この付録では、ゲートウェイ・プロシージャがアルファベット順に説明されています。

型定義はそれを使用するプロシージャとともに説明されます。 説明は、変更可能な型定義フィールドのみを対象にしています。 MQIフィールドに同等のその他のフィールドは、WebSphere MQで予約されている、ゲートウェイでサポートされていない、または変更できない値を含んでいるため、省略されます。

プロシージャの定義は、同等のMQIコールに関連付けられているIBM引数名を使用して表示されます。 たとえば:

MQGET(hobj, mqmd, mqgmo, msg)

MQGETコールの構文は次のとおりです:

MQGET(handle, descript, get_options, message);

説明:

  • handleは、定義でhobjとして指定された最初の引数の名前です。

  • descriptは、定義でmqmdとして指定された2番目の引数の名前です。

  • get_optionsは、定義でmqgmoとして指定された3番目の引数の名前です。

  • messageは、定義でmsgとして指定された4番目の引数の名前です。

    定義で示される順序で引数をコード化する場合、これらの引数に独自の名前を使用できます。

A.1.3 ゲートウェイが実行するMQIコール

これらのMQIコールには、ゲートウェイに同等のプロシージャはありません。

次のMQIコールでは、Oracleデータベースおよびゲートウェイが自動的にこれらのMQIコールの関数を実行するため、ゲートウェイに同等のプロシージャがありません。

  • MQBACK

    トランザクション・コントロールは、Oracleトランザクション・コーディネータにより処理されます。 Oracleアプリケーションでは、WebSphere MQに送信された変更を元に戻すために、個別のMQBACKコールを起動する必要はありません。

  • MQCONN

    Oracleアプリケーションがゲートウェイ・プロシージャを参照すると常に、Oracleデータベースおよびゲートウェイによりキュー・マネージャへの接続が確立されます。 ゲートウェイ・プロシージャをコールする際に使用されるデータベース・リンク名が、ゲートウェイが接続するキュー・マネージャを決定します。

  • MQCMIT

    トランザクション・コントロールは、Oracleトランザクション・コーディネータにより処理されます。 Oracleアプリケーションでは、WebSphere MQに送信された変更をコミットするために、個別のMQCMITコールを起動する必要はありません。

  • MQDISC

    キュー・マネージャへの接続は、Oracleデータベースおよびゲートウェイによりクローズされます。 Oracleアプリケーションが、キュー・マネージャとの接続をクローズする必要はありません。 現在のOracleセッションを終了またはデータベース・リンクを削除すると、キュー・マネージャとの接続が終了します。

A.1.4 サポートされていないMQIコール

これらのMQIコールはゲートウェイではサポートされていません。

これらを次に示します。

  • MQINQ

  • MQPUT1

  • MQSET

A.1.5 移行のヒント

この項では、Oracle Database Gateway for WebSphere MQ機能を使用するために、Oracle9 i DG4MQおよび既存のカスタマイズされたPL/SQLアプリケーション・プログラムをアップグレードする方法について説明します。

DG4MQデータ型およびRPC APIプロトタイプは、ゲートウェイ・インフラストラクチャの要件を満たすように変更されます。

DG4MQをOracle 10gリリース2以上にアップグレードする場合、Oracleでは、新しいバージョンのDG4MQを別の開発Oracleシステムにインストールすることをお薦めします。 システム構成およびテストの終了後、すべてのCOBOLコピー・ブックを転送し、Oracle Visual Workbenchを使用してMIPを再生成して再コンパイルしてください。 カスタマイズされたコードに必要な変更を加え、再コンパイルしてください。

DG4MQリリース8および9のPL/SQLアプリケーションの移行

DG4MQリリース8および9のPL/SQLアプリケーションを移行するには:

  1. PL/SQL宣言セクションで、次のDG4MQデータ型からdblink参照を削除します:

    • PGM8.MQOD

    • PGM8.MQMD

    • PGM8.MQPMO

    • PGM8.MQGMO

    次に、次のPGM8.MQ * RAWデータ型を削除します:

    • PGM8.MQODRAW

    • PGM8.MQMDRAW

    • PGM8.MQPMORAW

    • PGM8.MQGMORAW

  2. PL/SQL宣言セクションで、キューのハンドルのデータ型、PGM.MQOPENの3番目の引数をBINARY_INTEGERからPGM.MQOHに変更し、パッケージ名PGM8PGMに置き換えます。

    キューのハンドルのデータ型、PGMの3番目の引数、MQOPEN,BINARY_INTEGERからPGM.MQOHに変更します。

    たとえば、バージョン8および9では、次のデータ型を、Oracle 10g用にリストしたデータ型に変更してください。

    objdesc    PGM8.MQOD;
    msgdesc    PGM8.MQMD;
    putmsgopts PGM8.MQPMO;
    getmsgopts PGM8.MQGMO;
    hobj       BINARY_INTEGER;
    mqodRaw    PGM8.MQODRAW;
    mqmdRaw    PGM8.MQMDRAW;
    mqpmoRaw   PGM8.MQPMORAW;
    mqgmoRaw   PGM8.MQGMORAW;
    

    Oracle 10gリリース2以降のデータ型:

    objdesc     PGM.MQOD;
    msgdesc     PGM.MQMD;
    putmsgopts  PGM.MQPMO;
    getmsgopts  PGM.MQGMO;
    hobj        PGM.MQOH;
    
  3. PL/SQL実行可能セクションで、次のDG4MQプロシージャからdblink参照を削除します:

    PGM8.MQOPEN@dblink()
    PGM8.MQPUT@dblink()
    PGM8.MQGET@dblink()
    PGM8.MQCLOSE@dblink()
    

    次に、オブジェクト・キュー名が定義される新しいPGM.MQODタイプにdblinkを定義します。

    たとえば、バージョン8および9:

    objdesc.objectname := 'QUEUE1';
    

    Oracle 10gリリース2以降の場合:

    objdesc.objectname := 'QUEUE1';
    objdesc.dblinkname := 'dblink';
    
  4. 必要に応じて、すべてのDG4MQプロシージャのパッケージ名PGM8PGMに変更します。

    たとえば、バージョン8および9:

    PGM8.MQOPEN@dblink();
    PGM8.MQPUT@dblink();
    PGM8.MQGET@dblink();
    PGM8.MQCLOSE@dblink();
    

    Oracle 10gリリース2以降の場合:

    PGM.MQOPEN;
    PGM.MQPUT;
    PGM.MQGET;
    PGM.MQCLOSE;
    
  5. PL/SQL実行可能セクションで、PGM_UTL8.RAW_TO_ *で始まるすべての文を削除し、すべてのPGM_UTL8.TO_RAW文を削除し、MQ * RAWデータ型へのすべての参照を、次のDG4MQプロシージャで一致するMQ *データ型に置き換えます:

    • PGM.MQOPEN;

    • PGM.MQPU;

    • PGM.MQGET;

    • PGM.MQCLOSE;

    たとえば、バージョン8および9:

    mqodRaw := PGM_UTL8.TO_RAW(objdesc);
    PGM8.MQOPEN@dblink(mqodRaw, options, hobj);
    objdesc := PGM_UTL8.RAW_TO_MQMD(mqodRaw);
    mqmdRaw := PGM_UTL8.TO_RAW(msgdesc);
    mqpmoRaw := PGM_UTL8.TO_RAW(putmsgopts);
    PGM8.MQPUT@dblink(hobj, mqmdRaw, mqpmoRaw, putbuffer);
    putmsgopts := PGM_UTL8.RAW_TO_MQPMO(mqpmoRaw);
    msgdesc := PGM_UTL8.RAW_TO_MQMD(mqmdRaw);
    
    mqmdRaw := PGM_UTL8.TO_RAW(msgdesc);
    mqgmoRaw := PGM_UTL8.TO_RAW(getmsgopts);
    PGM8.MQGET@dblink(hobj, mqmdRaw, mqgmoRaw, putbuffer);
    getmsgopts := PGM_UTL8.RAW_TO_MQGMO(mqgmoRaw);
    msgdesc := PGM_UTL8.RAW_TO_MQMD(mqmdRaw);
    

    Oracle 10gリリース2以降の場合:

    PGM.MQOPEN(objdesc, options, hobj);
    PGM.MQPUT(hobj, msgdesc, putmsgopts, putbuffer);
    PGM.MQGET(hobj, msgdesc, getmsgopts, getbuffer);
    
  6. PL/SQL実行可能セクションで、古いMQ * RAWデータ型を参照するすべての文を削除します。

DG4MQリリース4.0.1.*.* PL/SQLアプリケーションの移行

アプリケーションを移行するには:

  1. PL/SQL宣言セクションで、次のDG4MQデータ型からdblink参照を削除します:
    • PGM.MQOD

    • PGM.MQMD

    • PGM.MQPMO

    • PGM.MQGMO

  2. PL/SQL実行可能セクションで、次のDG4MQプロシージャからdblink参照を削除し、オブジェクト・キュー名が定義されている新しいPGM.MQODオブジェクトにdblinkを定義します:
    • PGM.MQOPEN@dblink()

    • PGM.MQPUT@dblink()

    • PGM.MQGET@dblink()

    • PGM.MQCLOSE@dblink()

    たとえば、バージョン4:

    PGM.MQOPEN@dblink(objdesc, options, hobj);
    objdesc.objectname :='QUEUE1';
    PGM.MQPUT@dblink(hobj, msgdesc, putmsgopts, putbuffer);
    PGM.MQGET@dblink(hobj, msgdesc, getmsgopts, putbuffer);
    PGM.MQCLOSE@dblink(hobj, options);

A.2 MQCLOSEプロシージャ

MQCLOSE はキューを閉じます。

戻ったキュー・ハンドルが無効なため、アプリケーションは、キューへの別のMQPUTMQGETまたはMQCLOSEコールを発行する前に、MQOPENへの別のコールでキューを再オープンする必要があります。

MQCLOSE は、MQIコールと次の点で異なります:

  • ゲートウェイはキュー・マネージャ接続の管理を自動的に処理するため、接続ハンドル引数はMQCLOSEから省略されます。

  • MQI完了コードは、プロシージャ引数リストに含まれません。 対応するMQIコールの失敗によりにゲートウェイ・プロシージャが失敗すると、Oracleエラー・メッセージがコール元に戻されます。

  • MQI理由コードは、プロシージャ引数リストに含まれません。 ゲートウェイ・プロシージャに対応するMQIコールが理由コードを戻すと、コール元に戻されるOracleエラー・メッセージに理由コードが含まれます。

定義

MQCLOSE(hobj, options)

説明:

  • hobjには、キューがクローズするハンドルが含まれます。 ハンドルは、MQOPENへの以前のコールによって返されます。 この入力引数は、Oracle 10gリリース2の新しいPGM.MQOHオブジェクトです。

  • optionsは、クローズ・アクションを指定します。 クローズ・オプションには、PGM_SUP.MQCO_NONEまたはその他のPGM_SUP定数を使用します。 この入力引数は、BINARY_INTEGER PL/SQLデータ型です。

次のように、引数の順序が必須の順序の場合、独自の変数名を使用できます。

MQCLOSE(handle, close_options);

関連トピック

A.3 MQGETプロシージャ

MQGETプロシージャは、キューからメッセージを取得します。

キューは、PGM_SUP.MQOO_INPUT_AS_Q_DEF (または同等のオプション)オプションを設定して、MQOPENへの以前のコールからすでにオープンしている必要があります。 この形式のMQGETで取得されるメッセージは、32767バイトより短くする必要があります。

MQGET は、MQIコールと次の点で異なります:

  • ゲートウェイはキュー・マネージャ接続の管理を自動的に処理するため、接続ハンドル引数はMQGETから省略されます。

  • MQI完了コードは、プロシージャの引数リストに含まれません。 対応するMQIコールの失敗によりにゲートウェイ・プロシージャが失敗すると、Oracleエラー・メッセージがコール元に戻されます。

  • MQI理由コードは、プロシージャの引数リストに含まれません。 ゲートウェイ・プロシージャに対応するMQIコールが理由コードを戻すと、コール元に戻されるOracleエラー・メッセージに理由コードが含まれます。

  • Oracleデータベースおよびゲートウェイはメッセージ・データの長さを自動的に追跡するため、msg length引数はプロシージャの引数リストに含まれません。

定義

MQGET(hobj, mqmd, mqgmo, msg)

説明:

  • hobjには、キューがオープンするハンドルが含まれます。 ハンドルは、MQOPENへの以前のコールによって返されます。 この入力引数は、Oracle 10gリリース2の新しいPGM.MQOHオブジェクトです。

  • mqmdは、取得されるメッセージの属性を記述するために入力で使用されます。 これらの属性を記述するには、PGM.MQMDオブジェクト型定義のフィールドを使用します。

    出力時に、mqmdには、リクエストの処理方法に関する情報が含まれます。 キュー・マネージャは、戻り時にPGM.MQMDオブジェクト・フィールドの一部を設定します。

    この入出力引数は、PL/SQL PGM.MQMDデータ型です。

  • mqgmoは、取得リクエストを制御するオプション値を記述するために入力で使用されます。 これらのオプションを説明するには、PGM.MQGMOオブジェクト型定義のフィールドを使用します。

    出力時に、キュー・マネージャは、戻り時にPGM.MQGMOオブジェクト・フィールドの一部を設定します。

    この入出力引数は、PL/SQL PGM.MQGMOデータ型です。

  • msgには、取得されたメッセージが含まれます。 この出力引数は、PL/SQLデータ型のRAWまたはPGMです。MQGET_BUFFERです。

  1. 引数の順序が必須の順序の場合、独自の変数名を使用します。

    MQGET(handle, descript, opts, message);
    
  2. 次の例は、ゲートウェイ(UNIXベースのシステムではORACLE_HOME\dg4mq\getsample.sql on Microsoft Windows and ORACLE_HOME /dg4mq/sample/getsample.sql)のサンプルとして提供されており、WebSphere MQキューからすべてのメッセージを読み取ります。 詳細は、WebSphere MQアプリケーション・プログラミングに関するIBMのドキュメントを参照してください。

例A-1 getsample.sql

---- Copyright Oracle, 2007 All Rights Reserved.
--
-- NAME
--   getsample.sql
--
-- DESCRIPTION
--
--   Specify the database link name you created for the gateway. To do this,
--   replace the database link name 'YOUR_DBLINK_NAME' with the dblink name
--   you chose when the database link was created.
--
--   This script performs a test run for the MQSeries gateway. In this
--   script the queuename is 'YOUR_QUEUE_NAME', replace it with a valid 
--   queue name at the queue manager the gateway is configured for.
--
-- NOTES
--   Run the script from the SQL*Plus command line.
--
--   Make the sure the user is granted 'EXECUTE' on package dbms_output
--

SET SERVEROUTPUT ON
DECLARE

    objdesc      PGM.MQOD;
    msgDesc      PGM.MQMD;
    getOptions   PGM.MQGMO;
    objectHandle PGM.MQOH;
    message      raw(32767);

BEGIN

    objdesc.OBJECTNAME := 'QUEUE1';
    objdesc.DBLINKNAME := 'dg4mqdepdblink';
                  -- Open the queue 'YOUR_QUEUE_NAME' for reading.

    PGM.MQOPEN(objdesc, PGM_SUP.MQOO_INPUT_AS_Q_DEF, objectHandle);
              
    -- Get all messages from the queue.

    WHILE TRUE LOOP

        -- Reset msgid and correlid to get the next message.

        msgDesc.MSGID := PGM_SUP.MQMI_NONE;
        msgDesc.CORRELID := PGM_SUP.MQCI_NONE;

        PGM.MQGET(objectHandle, msgDesc, getOptions, message);

        -- Process the message....
        DBMS_OUTPUT.PUT_LINE('message read back = ' || rawtohex(message));

	 END LOOP;

EXCEPTION

      WHEN PGM_SUP.NO_MORE_MESSAGES THEN

          DBMS_OUTPUT.PUT_LINE('Warning: No more message found on the queue');

          -- Close the queue again.

          PGM.MQCLOSE(objectHandle, PGM_SUP.MQCO_NONE);

      WHEN OTHERS THEN

          -- Re-raise the error;

          DBMS_OUTPUT.PUT_LINE('Error: Oracle Database Gateway for WebSphere MQ
 verification script failed.');
          DBMS_OUTPUT.PUT_LINE(SQLERRM); 
			 raise;

END;
/

ノート:

ノート:

例外句を省略すると、PL/SQLブロックは失敗します。 その場合、PGM_SUP.NO_MORE_MESSAGESエラー・コードが生成されます。 MQGETに使用されるMSGIDおよびCORRELIDフィールドは、MQGETへの各コールの後に設定されます。 サイクルごとにリセットされない場合、MQGETは、通常存在しない最後の読取り操作と同じ識別子を持つ次のメッセージをチェックします。 PL/SQLブロックは、1つのメッセージのみを読み取ります。

A.3.1 PGM.MQMD型定義

PGMMQMDは、送信側アプリケーションと受信側アプリケーションの間で移動するときにメッセージに付随する制御情報を指定します。

また、キュー・マネージャまたは受信側アプリケーションによるメッセージの処理方法も含まれます。 PGMMQMDは、取得されるメッセージの属性を示します。

PGM.MQMDフィールドのデフォルト値を使用するか、アプリケーション要件のフィールドを変更できます。 たとえば、次のようにしてフィールド値を変更します。

mqmd.field_name := field_value;

説明:

  • mqmdPGMです。MQMDオブジェクト・データ型で、取得されるメッセージの属性を記述

  • field_nameは、PGM.MQMDオブジェクト型定義のフィールド名です。 必要な数のフィールドを設定できます。 フィールド名および説明の詳細は、表A-2を参照してください。

  • field_valueは、field_nameに割り当てる値です。 値を指定することも、PGM_SUP定数を使用して値を割り当てることもできます。

表A-2 PGM.MQMDオブジェクト・フィールド

フィールド名 説明 PL/SQLデータ型 初期値

REPORT

メッセージを送信するアプリケーションで、期待されるまたは期待されないイベントの発生時にキュー・マネージャで作成するレポート・メッセージ(複数可)を指定できます。 PGM_SUP定数を使用して値を割り当てます。 「REPORTフィールド」を参照してください。

RAW(4)

PGM_SUP.MQRO_ NONE

MSGTYPE

リプライ・メッセージ、レポート・メッセージ、または通常メッセージ(datagram)のメッセージ型を指定します。 PGM_SUP定数を使用して、値を割り当てます。 「MSGTYPEフィールド」を参照してください。

BINARY_INTEGER

PGM_SUP.MQMT_ DATAGRAM

EXPIRY

メッセージがキューに存続する時間を指定します。 有効期限の期間は10分の1秒単位で、送信側アプリケーションにより設定されます。 PGM_SUP定数を使用して値を割り当てます。 「EXPIRYフィールド」を参照してください。

BINARY_INTEGER

PGM_SUP.QMEI_ UNLIMITED

FEEDBACK

レポートの種類を示すために、REPORTフィールドとともに使用します。 PGM_SUP定数を使用して値を割り当てます。 「FEEDBACKフィールド」を参照してください。

BINARY_INTEGER

PGM_SUP.MQFB_ NONE

ENCODING

メッセージ・データ内の数値で使用されます。 PGM_SUP定数を使用して値を割り当てます。 「ENCODINGフィールド」を参照してください。

RAW(4)

PGM_SUP.MQENC_ NATIVE

CODEDCHARSETID

メッセージ内の文字のコード化された文字セット識別子を指定します。 PGM_SUP定数を使用して値を割り当てます。 「CODEDCHARSETIDフィールド」を参照してください。

BINARY_INTEGER

PGM_SUP.MQCCSI_DEFAULT

FORMAT

メッセージのコンテンツを受信側に伝える際に使用される空きフォーマット名。 書式を指定するか、PGM_SUP定数を使用します。 「FORMATフィールド」を参照してください。

CHAR(8)

PGM_SUP.MQFMT_ NONE

PRIORITY

メッセージの優先順位を指定します。 0以上の値(優先度が最低のゼロ)を指定するか、PGM_SUP定数を使用します。 「PRIORITYフィールド」を参照してください。

BINARY_INTEGER

PGM_SUP.MQPRI_ PRIORITY_AS_Q_ DEF

PERSISTENCE

送信側アプリケーションの入力フィールドです。 キュー・マネージャを再起動すると、永続キューは保持されます。 キュー・マネージャを再起動すると、非永続キューおよび一時キュー内のメッセージは失われます。 PGM_SUP定数を使用して、必要な永続性を指定します。 「PERSISTENCEフィールド」を参照してください。

BINARY_INTEGER

PGM_SUP.MQPER_ PERSISTENCE_AS_ Q_DEF

MSGID

取得されるメッセージのメッセージ識別子を指定します(メッセージの受信時)。 メッセージの送信時に値を指定しない場合(PGM_SUP.MQMI_NONE)、キュー・マネージャは一意の値を割り当てます。

RAW(24)

PGM_SUP.MQMI_NONE

CORRELID

メッセージの受信時に取得するメッセージの相関識別子を指定します(MSGIDフィールドを参照)。 メッセージを送信する場合は、任意の値を指定するか、またはメッセージに相関IDが必要ない場合はPGM_SUP.MQCI_NONEを使用します。

RAW(24)

PGM_SUP.MQCI_NONE

BACKOUTCOUNT

MQGETプロシージャの出力フィールド。 ロールバック操作によってメッセージがキューに戻された回数を示します。

BINARY_INTEGER

Zero

REPLYTOQ

返信先キューの名前を指定します。 これは、MQPUTの入力フィールドであり、送信アプリケーションで返信メッセージの送信先を指定できます。

これは、MQGETの出力フィールドでもあり、応答の送信先を受信アプリケーションに指示します。

CHAR(48)

NULL

REPLYTOQMGR

キュー・マネージャで返信メッセージまたはレポートを送信する先を示します。 これは、MQPUTの入力フィールドと、MQGETの出力フィールドです。

CHAR(48)

NULL

USERIDENTIFIER

受信側アプリケーションの出力フィールドです。 メッセージを送信するユーザーを識別します。 送信アプリケーションは、MQPUTmqpmo引数のCONTEXTフィールドがPGM_SUP.MQPMO_SET_IDENTITY_CONTEXTまたはPGM_SUP.MQPMO_SET_ALL_CONTEXTに設定されている場合、入力時にユーザーを指定できます。

CHAR(12)

NULL

ACCOUNTINGTOKEN

アプリケーション間で会計情報を転送するために使用されます。 送信アプリケーションは、アカウンティング情報を提供するか、PGM_SUPを使用します。MQACT_NONEは、アカウンティング情報が含まれないことを指定します。

CHAR(32)

PGM_SUP.MQACT_ NONE

APPLIDENTITYDATA

受信側アプリケーションがメッセージまたはその送信者に関するより多くの情報を提供するのに役立つよう、メッセージとともに送信する追加情報を指定します。

CHAR(32)

NULL

PUTAPPLTYPE

キュー上のメッセージにあるアプリケーションの種類を説明します。 PGM_SUP定数を使用して値を割り当てます。 「PUTAPPLTYPEフィールド」を参照してください。

BINARY_INTEGER

PGM.MQAT_NO_ CONTEXT

PUTAPPLNAME

キュー上にメッセージを置いたアプリケーションの名前を指定します。 送信側アプリケーションが、名前を指定するか、またはキュー・マネージャにこのフィールドを入力させます。 これは、受信側アプリケーションの出力フィールドです。

CHAR(28)

NULL

PUTDATE

キュー上にメッセージが置かれた日付を指定します。 送信側アプリケーションが日付を設定することも、キュー・マネージャにこれを処理させることもできます。 キュー・マネージャで使用される日付書式は、YYYYMMDDです。 これは、受信側アプリケーションの出力フィールドです。

CHAR(8)

NULL

PUTTIME

キュー上にメッセージが置かれた時間を指定します。 送信側アプリケーションが時間を設定することも、キュー・マネージャにこれを処理させることもできます。 キュー・マネージャで使用される時間書式は、HHMMSSTHです。 これは、受信側アプリケーションの出力フィールドです。

CHAR(8)

NULL

APPLORIGINDATA

メッセージの元に関する情報をメッセージに追加するために送信側アプリケーションによって使用されます。 これは、受信側アプリケーションの出力フィールドです。

CHAR(4)

NULL

A.3.2 PGM.MQGMO型定義

PGM.MQGMOを使用して、キューからのメッセージの取得方法に関するオプションおよび制御情報を指定します。

PGM.MQGMOを使用して、キューからのメッセージの取得方法に関するオプションおよび制御情報を指定します。 PGM.MQGMOフィールドのデフォルト値を使用するか、アプリケーション要件のフィールドを変更できます。 たとえば、次のようにしてフィールド値を変更します。

mqgmo.field_name := field_value

説明:

  • mqgmoは、PGM.MQGMOオブジェクト・データ型で、キューからのメッセージの取得方法に関するオプションおよび制御情報を指定します。

  • field_nameは、PGM.MQGMO型定義のフィールド名です。 必要な数のフィールドを設定できます。 名前およびフィールドの説明の詳細は、表A-3を参照してください。

  • field_valueは、field_nameに割り当てる値です。 値を指定することも、PGM_SUP定数を使用して値を割り当てることもできます。

表A-3 PGM.MQGMOフィールド

フィールド名 説明 PL/SQLデータ型 初期値

OPTIONS

MQGETプロシージャを制御するオプションを指定します。 1つ以上のPGM_SUP定数を追加して設定します。 「OPTIONSフィールド」を参照してください。

BINARY_INTEGER

PGM.MQGMO_ SYNCPOINT

(キューから取得されたメッセージは、Oracleトランザクション・コーディネータにより処理されます。)

WAITINTERVAL

MQGETがメッセージがキューに到達するまで待機する最大時間(ミリ秒)を指定します。   WAITINTERVALは、0以上にするか、PGM_SUPの値に設定します。MQWI_UNLIMITED (無制限の待機間隔)。

BINARY_INTEGER

Zero

RESOLVEDQNAME

メッセージが取得された宛先キューの解決された名前を含みます。 これは、コールから戻されるキュー・マネージャによって設定される出力フィールドです。

CHAR(48)

NULL

A.4 MQOPENプロシージャ

MQOPEN は、キューへのアクセスを確立します。

キューを開くために選択したモードに応じて、アプリケーションは後続のMQPUTMQGETまたはMQCLOSEコールを発行できます。

MQOPEN は、MQIコールと次の点で異なります:

  • ゲートウェイはキュー・マネージャ接続の管理を自動的に処理するため、接続ハンドル引数はMQOPENから省略されます。

  • MQI完了コードは、プロシージャ引数リストに含まれません。 対応するMQIコールの失敗によりにゲートウェイ・プロシージャが失敗すると、Oracleエラー・メッセージがコール元に戻されます。

  • MQI理由コードは、プロシージャ引数リストに含まれません。 ゲートウェイ・プロシージャに対応するMQIコールが理由コードを戻すと、コール元に戻されるOracleエラー・メッセージに理由コードが含まれます。

定義

MQOPEN(mqod, options, hobj)

説明:

  • mqodは、オープンするキューを指定します。 これらの属性を記述するには、PGM.MQOD型定義のフィールドを使用します。 出力時に、キュー・マネージャは、戻り時にPGM.MQODオブジェクト・フィールドの一部を設定します。

    この入出力引数は、PL/SQL PGM.MQODデータ型です。 PGM.MQODの詳細は、「PGM.MQOD タイプ定義」を参照してください。

  • optionsは、オープン・タイプを指定します。 「MQOPEN値」を参照してください。 この入力引数は、PL/SQL BINARY_INTEGERデータ型です。

  • hobjは、キューがオープンされた後のキューのハンドルを含み、後続のPGMコールの入力引数になります。 キュー・ハンドルは、次のいずれかの条件が発生するまで有効です。

    • キューは、MQCLOSEの呼出しによってクローズされます

    • 現在のトランザクションは、COMMITまたはROLLBACKコマンドによって永続化されます

    • Oracleユーザー・セッションは、DISCONNECTコマンドによって終了します。 この出力引数は、PGM.MQOHデータ型です。

次のように、引数の順序が必須の順序の場合、独自の変数名を使用できます。

MQOPEN and(descript, open_options, handle);

A.4.1 PGM.MQOD型定義

PGMMQODは、開くオブジェクトを定義するために使用されます。

PGM.MQODフィールドのデフォルト値を使用するか、アプリケーション要件のフィールドを変更できます。 たとえば、次のようにしてフィールド値を変更します。

mqod.field_name := field_value

説明:

  • mqodは、PGM.MQODデータ型で、開くオブジェクトを指定します。

  • field_nameは、PGM.MQOD型定義のフィールド名です。 必要な数のフィールドを設定できます。 フィールド名および説明の詳細は、表A-4を参照してください。

  • field_valueは、field_nameに割り当てる値です。 値を指定することも、PGM_SUP定数を使用して値を割り当てることもできます。

表A-4 PGM.MQODオブジェクト・フィールド

フィールド名 説明 PL/SQLデータ型 初期値

OBJECTTYPE

オープンするオブジェクトを指定します。 PGM_SUP定数を使用して値を割り当てます。 「OBJECTTYPEフィールド」を参照してください。

BINARY_INTEGER

PGM_SUP.MQOT_ Q(queue)

DBLINKNAME

データベース・リンク名を指定します。

CHAR(64)

NULL

OBJECTNAME

キュー・マネージャで定義されたオブジェクトのローカル名を指定します。

CHAR(48)

NULL

OBJECTQMGRNAME

OBJECTNAMEによって定義されたオブジェクトのキュー・マネージャの名前を指定します。 ゲートウェイは接続キューでのオブジェクトのオープンのみをサポートするため、OBJECTQMGRNAMEをNULL値に設定したままにします。

CHAR(48)

NULL

DYNAMICQNAME

OBJECTNAMEフィールドでモデル・キューの名前が指定されていないかぎり無視されます。 モデル・キューが関係すると、このフィールドは、動的キューの名前を指定します。

CHAR(48)

AMQ.*

ALTERNATEUSERID

MQOPENoptions引数がPGM_SUP.MQOO_ALTERNATE_USER_AUTHORITYの値に設定されている場合、このフィールドは、キュー・マネージャがオープンしているキューの認可を確認するために使用する代替ユーザーIDを指定します。

CHAR(12)

NULL

A.5 MQPUTプロシージャ

MQPUT は、メッセージをキューに送信します。

キューは、options引数をPGM_SUP.MQOO_OUTPUTの値に設定して、MQOPENへの以前のコールによってすでにオープンされている必要があります。

MQPUT は、MQIコールとは次のように異なります:

  • ゲートウェイはキュー・マネージャ接続の管理を自動的に処理するため、接続ハンドル引数はMQPUTから省略されます。

  • MQI完了コードは、プロシージャ引数リストに含まれません。 対応するMQIコールの失敗によりにゲートウェイ・プロシージャが失敗すると、Oracleエラー・メッセージがコール元に戻されます。

  • MQI理由コードは、プロシージャ引数リストに含まれません。 ゲートウェイ・プロシージャに対応するMQIコールが理由コードを戻すと、コール元に戻されるOracleエラー・メッセージに理由コードが含まれます。

  • Oracleデータベースおよびゲートウェイはメッセージ・データの長さを自動的に追跡するため、msg length引数はプロシージャ引数リストに含まれません。

定義

MQPUT(hobj, mqmd, mqpmo, msg)

説明:

  • hobjには、メッセージの送信先のキューのハンドルが含まれます。 ハンドルは、MQOPENへの以前のコールによって返されます。 この入力引数は、Oracle10gリリース2の新しいPGM.MQOHです。

  • mqmdは、取得されるメッセージの属性を記述するために入力で使用されます。 これらの属性を記述するには、PGM.MQMD型定義のフィールドを使用します。 出力時に、mqmdには、リクエストの処理方法に関する情報が含まれます。 キュー・マネージャは、戻り時にPGM.MQMDフィールドの一部を設定します。

    この入出力引数は、PGM.MQMDです。 PGM.MQMDの詳細は、「PGM.MQMD タイプ定義」を参照してください。

  • mqpmoは、putリクエストを制御するオプション値を記述するために入力で使用されます。 これらのオプションを説明するには、PGM.MQPMO型定義のフィールドを使用します。 出力時に、キュー・マネージャは、戻り時にPGM.MQPMOフィールドの一部を設定します。

    この入出力引数は、PGM.MQPMOです。 PGM.MQPMOの詳細は、「PGM.MQPMO タイプ定義」を参照してください。

  • msgには、送信するメッセージが含まれます。 この入力引数は、PL/SQLデータ型のRAWまたはPGMです。MQPUT_BUFFERです。

  1. 引数の順序が必須の順序の場合、独自の変数名を使用できます。

    MQPUT(handle, descript, options, message);
    
  2. 次のサンプルは、ゲートウェイ(UNIXベースのシステムではMicrosoft Windowsの場合はORACLE_HOME\dg4mq\sample\putsample.sqlORACLE_HOME /dg4mq/sample/putsample.sql)のサンプルとして提供されており、32767バイトより短いメッセージを送信します:

例A-2 putsample.sql

--
-- Copyright Oracle, 2005 All Rights Reserved.
--
-- NAME
--   putsample.sql
--
-- DESCRIPTION
--
--   Specify the database link name you created for the gateway. To do this,
--   replace the database link name 'YOUR_DBLINK_NAME' with the dblink name
--   you chose when the database link was created.
--
--   This script performs a test run for the MQSeries gateway. In this
--   script the queuename is 'YOUR_QUEUE_NAME', replace it with a valid 
--   queue name at the queue manager the gateway is configured for.
--   
-- NOTES
--   Run the script from the SQL*Plus command line.
--
--   Make the sure the user is granted 'EXECUTE' on package dbms_output
--

SET SERVEROUTPUT ON

DECLARE
    objdesc      PGM.MQOD;
    msgDesc      PGM.MQMD;
    putOptions   PGM.MQPMO;
    objectHandle PGM.MQOH;
    message      raw(255);

BEGIN

    objdesc.OBJECTNAME := 'QUEUE1';
    objdesc.DBLINKNAME := 'dg4mqdepdblink';
                  -- Open the queue 'YOUR_QUEUE_NAME' for sending.

    PGM.MQOPEN(objdesc, PGM_SUP.MQOO_OUTPUT, objectHandle);
                  -- Put the message buffer on the queue.

    message := '01020304050607080900';

    PGM.MQPUT(objectHandle, msgDesc, putOptions, message);   
     -- Print the message we are putting on the queue

    dbms_output.put_line('message put on queue = ' || rawtohex(message));

    -- Close the queue again.

    PGM.MQCLOSE(objectHandle, PGM_SUP.MQCO_NONE);

EXCEPTION

    -- something else went wrong.. tell the user.

    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error: Procedural Gateway for IBM MQSeries
 verification script failed.');
        DBMS_OUTPUT.PUT_LINE(SQLERRM); 
        PGM.MQCLOSE(objectHandle, PGM_SUP.MQCO_NONE);

END;
/

A.5.1 PGM.MQPMO型定義

PGMMQPMOは、MQPUTmqpmo引数を定義するために使用されます。

メッセージを処理するオプションおよび制御情報を指定します。

PGM.MQPMOフィールドのデフォルト値を使用するか、アプリケーション要件のフィールドを変更できます。 たとえば、次のようにしてフィールド値を変更します。

mqpmo.field_name := field_value

説明:

  • mqpmoは、PGM.MQPMOデータ型で、メッセージの処理方法およびキューへの挿入方法に関するオプションおよび制御情報を指定します。

  • field_nameは、PGM.MQPMO型定義のフィールド名です。 必要な数のフィールドを設定できます。 フィールド名および説明の詳細は、表A-5を参照してください。

  • field_valueは、field_nameに割り当てる値です。 値を指定することも、PGM_SUP定数を使用して値を割り当てることもできます。

表A-5 PGM.MQPMOフィールド

フィールド名 説明 PL/SQLデータ型 初期値

OPTIONS

MQPUTプロシージャを制御するオプションを指定します。 このフィールドは、1つ以上のPGM_SUP定義を追加することで設定されます。 OPTIONSフィールドを参照してください。

BINARY_INTEGER

PGM.MQPMO_ SYNCPOINT

(キューに配置されたメッセージは、Oracleトランザクション・コーディネータにより処理されます。)

CONTEXT

入力キューのオブジェクト・ハンドルを指定します。 これは、OPTIONSフィールドにビットPGM_SUP.MQPMO_PASS_IDENTITY_ CONTEXTまたはビットPGM_SUP.MQPMO_PASS_ALL_CONTEXTが設定されている場合にのみ使用されます。

BINARY_INTEGER

Zero

RESOLVEDQNAME

返信先キューの解決済の名前を含みます。 これは、キュー・マネージャによって設定される出力フィールドです。

CHAR(48)

NULL

RESOLVEDQMGRNAME

RESOLVEDQNAMEフィールドに返されたキュー名のキュー・マネージャの解決された名前が含まれます。 これは、キュー・マネージャによって設定される出力フィールドです。

CHAR(48)

NULL

A.6 PGM_SUPパッケージ

PGM_SUPには、ゲートウェイ・プロシージャおよびPGM型定義で使用する定数および例外の定義が含まれます。

これらの値を使用するには、通常、MQIおよびWebSphere MQプログラミングの幅広い知識が必要です。 これらの定義は、MQI定義ルールに従います。 WebSphere MQアプリケーションの記述の詳細は、IBM 「MQSeriesアプリケーション・プログラミング・リファレンス」を参照してください。

A.6.1 PGM.MQGMO 値

これらのトピックでは、PGM.MQGMO値について説明します。

A.6.1.1 OPTIONSフィールド
MQGMO_NO_WAIT                 constant binary_integer := 0;
MQGMO_NONE                    constant binary_integer := 0;
MQGMO_WAIT                    constant binary_integer := 1;
MQGMO_SYNCPOINT               constant binary_integer := 2;
MQGMO_NO_SYNCPOINT            constant binary_integer := 4;
MQGMO_SET_SIGNAL              constant binary_integer := 8;
MQGMO_BROWSE_FIRST            constant binary_integer := 16;
MQGMO_BROWSE_NEXT             constant binary_integer := 32;
MQGMO_ACCEPT_TRUNCATED_MSG    constant binary_integer := 64;
MQGMO_MARK_SKIP_BACKOUT       constant binary_integer := 128;
MQGMO_MSG_UNDER_CURSOR        constant binary_integer := 256;
MQGMO_LOCK                    constant binary_integer := 512;
MQGMO_UNLOCK                  constant binary_integer := 1024;
MQGMO_BROWSE_MSG_UNDER_CURSOR constant binary_integer := 2048;
MQGMO_SYNCPOINT_IF_PERSISTENT constant binary_integer := 4096;
MQGMO_FAIL_IF_QUIESCING       constant binary_integer := 8192;
MQGMO_CONVERT                 constant binary_integer := 16384;
MQGMO_LOGICAL_ORDER           constant binary_integer := 32768;
MQGMO_COMPLETE_MSG            constant binary_integer := 65536;
MQGMO_ALL_MSGS_AVAILABLE      constant binary_integer := 131072;
MQGMO_ALL_SEGMENTS_AVAILABLE  constant binary_integer := 262144;
A.6.1.2 VERSIONフィールド
MQGMO_VERSION_1                constant binary_integer := 1;
MQGMO_CURRENT_VERSION          constant binary_integer := 1;
MQGMO_VERSION_2                constant binary_integer := 2;
MQGMO_VERSION_3                constant binary_integer := 3;
A.6.1.3 MATCHOPTIONSフィールド
MQMO_DEFAULT                   constant binary_integer := 3;
MQMO_NONE                      constant binary_integer := 0;
MQMO_MATCH_MSG_ID              constant binary_integer := 1;
MQMO_MATCH_CORREL_ID           constant binary_integer := 2;
MQMO_MATCH_GROUP_ID            constant binary_integer := 4;
MQMO_MATCH_MSG_SEQ_NUMBER      constant binary_integer := 8;
MQMO_MATCH_OFFSET              constant binary_integer := 16;
MQMO_MATCH_MSG_TOKEN           constant binary_integer := 32;
A.6.1.4 WAITINTERVAL
PGM_SUP.MQWI_UNLIMITED CONSTANT BINARY_INTEGER := -1;
PGM_SUP.MQWI_UNITS     CONSTANT BINARY_INTEGER := 1000;

A.6.2 PGM.MQMD 値

これらのトピックでは、PGM.MQOD値について説明します。

A.6.2.1 CODEDCHARSETIDフィールド
PGM_SUP.MQCCSI_DEFAULT  CONSTANT BINARY_INTEGER := 0;
PGM_SUP.MQCCSI_Q_MGR    CONSTANT BINARY_INTEGER := 0;
PGM_SUP.MQCCSI_EMBEDDED CONSTANT BINARY_INTEGER := -1;
A.6.2.2 ENCODINGフィールド
PGM_SUP.MQENC_NATIVE  CONSTANT RAW(4) := '00000111';
A.6.2.3 ENCODINGフィールド、2進整数の値
PGM_SUP.MQENC_INTEGER_UNDEFINED CONSTANT RAW(4) := '00000000';
PGM_SUP.MQENC_INTEGER_NORMAL    CONSTANT RAW(4) := '00000001';
PGM_SUP.MQENC_INTEGER_REVERSED  CONSTANT RAW(4) := '00000002';
A.6.2.4 ENCODINGフィールド、浮動小数点数の値
PGM_SUP.MQENC_FLOAT_UNDEFINED     CONSTANT RAW(4) := '00000000';
PGM_SUP.MQENC_FLOAT_IEEE_NORMAL   CONSTANT RAW(4) := '00000100';
PGM_SUP.MQENC_FLOAT_IEEE_REVERSED CONSTANT RAW(4) := '00000200';
PGM_SUP.MQENC_FLOAT_S390          CONSTANT RAW(4) := '00000300';
A.6.2.5 ENCODINGフィールド、マスク値
PGM_SUP.MQENC_INTEGER_MASK  CONSTANT RAW(4) := '0000000f';
PGM_SUP.MQENC_DECIMAL_MASK  CONSTANT RAW(4) := '000000f0';
PGM_SUP.MQENC_FLOAT_MASK    CONSTANT RAW(4) := '00000f00';
PGM_SUP.MQENC_RESERVED_MASK CONSTANT RAW(4) := 'fffff000';
A.6.2.6 ENCODINGフィールド、パック10進数の値
PGM_SUP.MQENC_DECIMAL_UNDEFINED CONSTANT RAW(4) := '00000000';
PGM_SUP.MQENC_DECIMAL_NORMAL    CONSTANT RAW(4) := '00000010';
PGM_SUP.MQENC_DECIMAL_REVERSED  CONSTANT RAW(4) := '00000020';
A.6.2.7 EXPIRYフィールド
PGM_SUP.MQEI_UNLIMITED   CONSTANT BINARY_INTEGER := -1;
PGM_SUP.MQEI_MIN_EXPIRY  CONSTANT BINARY_INTEGER := 0;
PGM_SUP.MQEI_UNITS       CONSTANT BINARY_INTEGER := 10;
A.6.2.8 FEEDBACKフィールド
PGM_SUP.MQFB_NONE                   CONSTANT BINARY_INTEGER := 0;
PGM_SUP.MQFB_SYSTEM_FIRST           CONSTANT BINARY_INTEGER := 1;
PGM_SUP.MQFB_EXPIRATION             CONSTANT BINARY_INTEGER := 258;
PGM_SUP.MQFB_COA                    CONSTANT BINARY_INTEGER := 259;
PGM_SUP.MQFB_COD                    CONSTANT BINARY_INTEGER := 260;
PGM_SUP.MQFB_QUIT                   CONSTANT BINARY_INTEGER := 256;
PGM_SUP.MQFB_CHANNEL_COMPLETED      CONSTANT BINARY_INTEGER := 262;
PGM_SUP.MQFB_CHANNEL_FAIL_RETRY     CONSTANT BINARY_INTEGER := 263;
PGM_SUP.MQFB_CHANNEL_FAIL           CONSTANT BINARY_INTEGER := 264;
PGM_SUP.MQFB_APPL_CANNOT_BE_STARTED CONSTANT BINARY_INTEGER := 265;
PGM_SUP.MQFB_TM_ERROR               CONSTANT BINARY_INTEGER := 266;
PGM_SUP.MQFB_APPL_TYPE_ERROR        CONSTANT BINARY_INTEGER := 267;
PGM_SUP.MQFB_STOPPED_BY_MSG_EXIT    CONSTANT BINARY_INTEGER := 268;
PGM_SUP.MQFB_XMIT_Q_MSG_ERROR       CONSTANT BINARY_INTEGER := 271;
PGM_SUP.MQFB_SYSTEM_LAST            CONSTANT BINARY_INTEGER := 65535;
PGM_SUP.MQFB_APPL_FIRST             CONSTANT BINARY_INTEGER := 65536;
PGM_SUP.MQFB_APPL_LAST              CONSTANT BINARY_INTEGER := 999999999;
A.6.2.9 FORMATフィールド
MQFMT_NONE               constant char(8) := '        ';
MQFMT_ADMIN              constant char(8) := 'MQADMIN ';
MQFMT_CHANNEL_COMPLETED  constant char(8) := 'MQCHCOM ';
MQFMT_CICS               constant char(8) := 'MQCICS  ';
MQFMT_COMMAND_1          constant char(8) := 'MQCMD1  ';
MQFMT_COMMAND_2          constant char(8) := 'MQCMD2  ';
MQFMT_DEAD_LETTER_HEADER constant char(8) := 'MQDEAD  ';
MQFMT_DIST_HEADER        constant char(8) := 'MQHDIST ';
MQFMT_EVENT              constant char(8) := 'MQEVENT ';
MQFMT_IMS                constant char(8) := 'MQIMS   ';
MQFMT_IMS_VAR_STRING     constant char(8) := 'MQIMSVS ';
MQFMT_MD_EXTENTION       constant char(8) := 'MQHMDE  ';
MQFMT_PCF                constant char(8) := 'MQPCF   ';
MQFMT_REF_MSG_HEADER     constant char(8) := 'MQHREF  ';
MQFMT_STRING             constant char(8) := 'MQSTR   ';
MQFMT_TRIGGER            constant char(8) := 'MQTRIG  ';
MQFMT_WORK_INFO_HEADER   constant char(8) := 'MQHWIH  ';
MQFMT_XMIT_Q_HEADER      constant char(8) := 'MQXMIT  ';
A.6.2.10 MSGTYPEフィールド
PGM_SUP.MQMT_SYSTEM_FIRST CONSTANT BINARY_INTEGER := 1; 
PGM_SUP.MQMT_REQUEST      CONSTANT BINARY_INTEGER := 1; 
PGM_SUP.MQMT_REPLY        CONSTANT BINARY_INTEGER := 2; 
PGM_SUP.MQMT_DATAGRAM     CONSTANT BINARY_INTEGER := 8; 
PGM_SUP.MQMT_REPORT       CONSTANT BINARY_INTEGER := 4; 
PGM_SUP.MQMT_SYSTEM_LAST  CONSTANT BINARY_INTEGER := 65535; 
PGM_SUP.MQMT_APPL_FIRST   CONSTANT BINARY_INTEGER := 65536; 
PGM_SUP.MQMT_APPL_LAST    CONSTANT BINARY_INTEGER := 999999999;
A.6.2.11 PERSISTENCEフィールド
PGM_SUP.MQPER_PERSISTENT           CONSTANT BINARY_INTEGER := 1;
PGM_SUP.MQPER_NOT_PERSISTENT       CONSTANT BINARY_INTEGER := 0;
PGM_SUP.MQPER_PERSISTENCE_AS_Q_DEF CONSTANT BINARY_INTEGER := 2;
A.6.2.12 優先度フィールド
PGM_SUP.MQPRI_PRIORITY_AS_Q_DEF CONSTANT BINARY_INTEGER := -1; 
PGM_SUP.MQPRI_MIN_PRIORITY      CONSTANT BINARY_INTEGER := 0; 
PGM_SUP.MQPRI_MAX_PRIORITY      CONSTANT BINARY_INTEGER := 9;
A.6.2.13 PUTAPPLTYPEフィールド
MQAT_UNKNOWN     constant binary_integer := -1;
MQAT_NO_CONTEXT  constant binary_integer := 0;
MQAT_CICS        constant binary_integer := 1;
MQAT_MVS         constant binary_integer := 2;
MQAT_OS390       constant binary_integer := 2;
MQAT_IMS         constant binary_integer := 3;
MQAT_OS2         constant binary_integer := 4;
MQAT_DOS         constant binary_integer := 5;
MQAT_AIX         constant binary_integer := 6;
MQAT_UNIX        constant binary_integer := 6;
MQAT_QMGR        constant binary_integer := 7;
MQAT_OS400       constant binary_integer := 8;
MQAT_WINDOWS     constant binary_integer := 9;
MQAT_CICS_VSE    constant binary_integer := 10;
MQAT_WINDOWS_NT  constant binary_integer := 11;
MQAT_VMS         constant binary_integer := 12;
MQAT_GUARDIAN    constant binary_integer := 13;
MQAT_NSK         constant binary_integer := 13;
MQAT_VOS         constant binary_integer := 14;
MQAT_IMS_BRIDGE  constant binary_integer := 19;
MQAT_XCF         constant binary_integer := 20;
MQAT_CICS_BRIDGE constant binary_integer := 21;
MQAT_NOTES_AGENT constant binary_integer := 22;
MQAT_USER_FIRST  constant binary_integer := 65536;
MQAT_USER_LAST   constant binary_integer := 999999999;
MQAT_DEFAULT     constant binary_integer := 6;
A.6.2.14 REPORTフィールド
MQRO_NEW_MSG_ID                constant raw(4) := '00000000';
MQRO_COPY_MSG_ID_TO_CORREL_ID  constant raw(4) := '00000000';
MQRO_DEAD_LETTER_Q             constant raw(4) := '00000000';
MQRO_NONE                      constant raw(4) := '00000000';
MQRO_PAN                       constant raw(4) := '00000001';
MQRO_NAN                       constant raw(4) := '00000002';
MQRO_PASS_CORREL_ID            constant raw(4) := '00000040';
MQRO_PASS_MSG_ID               constant raw(4) := '00000080';
MQRO_COA                       constant raw(4) := '00000100';
MQRO_COA_WITH_DATA             constant raw(4) := '00000300';
MQRO_COA_WITH_FULL_DATA        constant raw(4) := '00000700';
MQRO_COD                       constant raw(4) := '00000800';
MQRO_COD_WITH_DATA             constant raw(4) := '00001800';
MQRO_COD_WITH_FULL_DATA        constant raw(4) := '00003800';
MQRO_EXPIRATION                constant raw(4) := '00200000';
MQRO_EXPIRATION_WITH_DATA      constant raw(4) := '00600000';
MQRO_EXPIRATION_WITH_FULL_DATA constant raw(4) := '00E00000';
MQRO_EXCEPTION                 constant raw(4) := '01000000';
MQRO_EXCEPTION_WITH_DATA       constant raw(4) := '03000000';
MQRO_EXCEPTION_WITH_FULL_DATA  constant raw(4) := '07000000';
MQRO_DISCARD_MSG               constant raw(4) := '08000000';
A.6.2.15 VERSIONフィールド
MQMD_VERSION_1                constant binary_integer := 1;
MQMD_VERSION_2                constant binary_integer := 2;
MQMD_CURRENT_VERSION          constant binary_integer := 2;
A.6.2.16 REPORTフィールド、マスク値
PGM_SUP.MQRO_REJECT_UNSUP_MASK         CONSTANT RAW(4) := '101c0000';
PGM_SUP.MQRO_ACCEPT_UNSUP_MASK         CONSTANT RAW(4) := 'efe000ff';
PGM_SUP.MQRO_ACCEPT_UNSUP_IF_XMIT_MASK CONSTANT RAW(4) := '0003ff00';

A.6.3 PGM.MQOD 値

これらのトピックでは、PGM.MQOD値について説明します。

A.6.3.1 OBJECTTYPEフィールド
PGM_SUP.MQOT_Q       CONSTANT BINARY_INTEGER := 1;
PGM_SUP.MQOT_PROCESS CONSTANT BINARY_INTEGER := 3;
PGM_SUP.MQOT_Q_MGR   CONSTANT BINARY_INTEGER := 5;
PGM_SUP.MQOT_CHANNEL CONSTANT BINARY_INTEGER := 6;
A.6.3.2 OBJECTTYPEフィールド、拡張値
MQOT_ALL               constant binary_integer := 1001;
MQOT_ALIAS_Q           constant binary_integer := 1002;
MQOT_MODEL_Q           constant binary_integer := 1003;
MQOT_LOCAL_Q           constant binary_integer := 1004;
MQOT_REMOTE_Q          constant binary_integer := 1005;
MQOT_SENDER_CHANNEL    constant binary_integer := 1007;
MQOT_SERVER_CHANNEL    constant binary_integer := 1008;
MQOT_REQUESTER_CHANNEL constant binary_integer := 1009;
MQOT_RECEIVER_CHANNEL  constant binary_integer := 1010;
MQOT_CURRENT_CHANNEL   constant binary_integer := 1011;
MQOT_SAVED_CHANNEL     constant binary_integer := 1012;
MQOT_SVRCONN_CHANNEL   constant binary_integer := 1013;
MQOT_CLNTCONN_CHANNEL  constant binary_integer := 1014;
A.6.3.3 VERSIONフィールド
MQOD_VERSION_1                constant binary_integer := 1;
MQOD_VERSION_2                constant binary_integer := 2;
MQOD_CURRENT_VERSION          constant binary_integer := 2;

A.6.4 PGM.MQPMO 値

これらのトピックでは、PGM.MQPMO値について説明します。

A.6.4.1 OPTIONSフィールド
MQPMO_NONE                     constant binary_integer := 0;
MQPMO_SYNCPOINT                constant binary_integer := 2;
MQPMO_NO_SYNCPOINT             constant binary_integer := 4;
MQPMO_DEFAULT_CONTEXT          constant binary_integer := 32;
MQPMO_NEW_MSG_ID               constant binary_integer := 64;
MQPMO_NEW_CORREL_ID            constant binary_integer := 128;
MQPMO_PASS_IDENTITY_CONTEXT    constant binary_integer := 256;
MQPMO_PASS_ALL_CONTEXT         constant binary_integer := 512;
MQPMO_SET_IDENTITY_CONTEXT     constant binary_integer := 1024;
MQPMO_SET_ALL_CONTEXT          constant binary_integer := 2048;
MQPMO_ALTERNATE_USER_AUTHORITY constant binary_integer := 4096;
MQPMO_FAIL_IF_QUIESCING        constant binary_integer := 8192;
MQPMO_NO_CONTEXT               constant binary_integer := 16384;
MQPMO_LOGICAL_ORDER            constant binary_integer := 32768;
A.6.4.2 VERSIONフィールド
MQPMO_VERSION_1                constant binary_integer := 1;
MQPMO_VERSION_2                constant binary_integer := 2;
MQPMO_CURRENT_VERSION          constant binary_integer := 2;

A.6.5 MQCLOSE値

これらのトピックでは、MQCLOSE値について説明します。

A.6.5.1 hobj引数
PGM_SUP.MQHO_UNUSABLE_HOBJ CONSTANT BINARY_INTEGER := -1;
A.6.5.2 options引数
PGM_SUP.MQCO_NONE         CONSTANT BINARY_INTEGER := 0;
PGM_SUP.MQCO_DELETE       CONSTANT BINARY_INTEGER := 1;
PGM_SUP.MQCO_DELETE_PURGE CONSTANT BINARY_INTEGER := 2;

A.6.6 MQOPEN値

これらのトピックでは、MQOPEN値について説明します。

A.6.6.1 options引数
MQOO_BIND_AS_Q_DEF            constant binary_integer := 0;
MQOO_INPUT_AS_Q_DEF           constant binary_integer := 1;
MQOO_INPUT_SHARED             constant binary_integer := 2;
MQOO_INPUT_EXCLUSIVE          constant binary_integer := 4;
MQOO_BROWSE                   constant binary_integer := 8;
MQOO_OUTPUT                   constant binary_integer := 16;
MQOO_INQUIRE                  constant binary_integer := 32;
MQOO_SET                      constant binary_integer := 64;
MQOO_SAVE_ALL_CONTEXT         constant binary_integer := 128;
MQOO_PASS_IDENTITY_CONTEXT    constant binary_integer := 256;
MQOO_PASS_ALL_CONTEXT         constant binary_integer := 512;
MQOO_SET_IDENTITY_CONTEXT     constant binary_integer := 1024;
MQOO_SET_ALL_CONTEXT          constant binary_integer := 2048;
MQOO_ALTERNATE_USER_AUTHORITY constant binary_integer := 4096;
MQOO_FAIL_IF_QUIESCING        constant binary_integer := 8192;
MQOO_BIND_ON_OPEN             constant binary_integer := 16384;
MQOO_BIND_NOT_FIXED           constant binary_integer := 32768;
MQOO_RESOLVE_NAMES            constant binary_integer := 65536;

A.6.7 PGM型定義フィールドの最大長

これらの定数は、PGM型定義で使用するフィールドの許容最大長を含みます。

たとえば、定数PGM_SUP.MQ_ACCOUNTING_TOKEN_LENGTHは、PGM.MQMD.ACCOUNTINGTOKENの最大長が32文字であることを指定します。

MQ_ABEND_CODE_LENGTH         constant binary_integer :=  4;
MQ_ACCOUNTING_TOKEN_LENGTH   constant binary_integer :=  32;
MQ_APPL_IDENTITY_DATA_LENGTH constant binary_integer :=  32;
MQ_APPL_ORIGIN_DATA_LENGTH   constant binary_integer :=  4;
MQ_ATTENTION_ID_LENGTH       constant binary_integer :=  4;
MQ_AUTHENTICATOR_LENGTH      constant binary_integer :=  8;
MQ_CANCEL_CODE_LENGTH        constant binary_integer :=  4;
MQ_CLUSTER_NAME_LENGTH       constant binary_integer :=  48;
MQ_CORREL_ID_LENGTH          constant binary_integer :=  24;
MQ_CREATION_DATE_LENGTH      constant binary_integer :=  12;
MQ_CREATION_TIME_LENGTH      constant binary_integer :=  8;
MQ_DATE_LENGTH               constant binary_integer :=  12;
MQ_EXIT_NAME_LENGTH          constant binary_integer :=  128;
MQ_FACILITY_LENGTH           constant binary_integer :=  8;
MQ_FACILITY_LIKE_LENGTH      constant binary_integer :=  4;
MQ_FORMAT_LENGTH             constant binary_integer :=  8;
MQ_FUNCTION_LENGTH           constant binary_integer :=  4;
MQ_GROUP_ID_LENGTH           constant binary_integer :=  24;
MQ_LTERM_OVERRIDE_LENGTH     constant binary_integer :=  8;
MQ_MFS_MAP_NAME_LENGTH       constant binary_integer :=  8;
MQ_MSG_HEADER_LENGTH         constant binary_integer :=  4000;
MQ_MSG_ID_LENGTH             constant binary_integer :=  24;
MQ_MSG_TOKEN_LENGTH          constant binary_integer :=  16;
MQ_NAMELIST_DESC_LENGTH      constant binary_integer :=  64;
MQ_NAMELIST_NAME_LENGTH      constant binary_integer :=  48;
MQ_OBJECT_INSTANCE_ID_LENGTH constant binary_integer :=  24;
MQ_NAME_LENGTH               constant binary_integer :=  48;
MQ_PROCESS_APPL_ID_LENGTH    constant binary_integer :=  256;
MQ_PROCESS_DESC_LENGTH       constant binary_integer :=  64;
MQ_PROCESS_ENV_DATA_LENGTH   constant binary_integer :=  128;
MQ_PROCESS_NAME_LENGTH       constant binary_integer :=  48;
MQ_PROCESS_USER_DATA_LENGTH  constant binary_integer :=  128;
MQ_PUT_APPL_NAME_LENGTH      constant binary_integer :=  28;
MQ_PUT_DATE_LENGTH           constant binary_integer :=  8;
MQ_PUT_TIME_LENGTH           constant binary_integer :=  8;
MQ_Q_DESC_LENGTH             constant binary_integer :=  64;
MQ_Q_MGR_DESC_LENGTH         constant binary_integer :=  64;
MQ_Q_MGR_IDENTIFIER_LENGTH   constant binary_integer :=  48;
MQ_Q_MGR_NAME_LENGTH         constant binary_integer :=  48;
MQ_Q_NAME_LENGTH             constant binary_integer :=  48;
MQ_REMOTE_SYS_ID_LENGTH      constant binary_integer :=  4;
MQ_SERVICE_NAME_LENGTH       constant binary_integer :=  32;
MQ_SERVICE_STEP_LENGTH       constant binary_integer :=  8;
MQ_START_CODE_LENGTH         constant binary_integer :=  4;
MQ_STORAGE_CLASS_LENGTH      constant binary_integer :=  8;
MQ_TIME_LENGTH               constant binary_integer :=  8;
MQ_TRAN_INSTANCE_ID_LENGTH   constant binary_integer :=  16;
MQ_TRANSACTION_ID_LENGTH     constant binary_integer :=  4;
MQ_TP_NAME_LENGTH            constant binary_integer :=  64;
MQ_TRIGGER_DATA_LENGTH       constant binary_integer :=  64;
MQ_USER_ID_LENGTH            constant binary_integer :=  12;

A.6.8 エラー・コード定義

このトピックでは、いくつかのエラー・コード定義について説明します。

エラー・コード29400: データ・カートリッジ・エラーが発生しました

このエラー・コードは、DG4MQに実装されたMQI opcodeが失敗することを示します。 原因の詳細は、IBMのWebSphereリファレンス・マニュアルを参照し、opcode、その完了コードおよび理由コードを検索してください。

MQI opcode failed. completion code=xxxx. reason code=xxxx.

例A-3 test.sql

--
-- Copyright Oracle, 2005 All Rights Reserved.
--
-- NAME
--   test.sql
--
-- DESCRIPTION
--
--   Specify the database link name you created for the gateway. To do this,
--   replace the database link name 'YOUR_DBLINK_NAME' with the dblink name
--   you chose when the database link was created.
--
--   This script performs a test run for the MQSeries gateway. In this
--   script the queuename is 'YOUR_QUEUE_NAME', replace queuename with 
--   a valid queue name at the queue manager the gateway is configured 
--   for.
--
--   First the script puts a raw message of 10 bytes on the specified 
--   queue. 
-- 
--   When successfully completed the put operation, the script does a 
--   get on the same queue to read the message back.
--
--   The contents of both messages put and retrieved from the queue are 
--   printed to standard out for verification by the user.
--
-- NOTES
--   Run the script from the SQL*Plus command line.
--
--   Make the sure the user is granted 'EXECUTE' on package dbms_output
--

set serveroutput on

declare

  objdesc    PGM.MQOD;
  hobj       PGM.MQOH;
  msgdesc    PGM.MQMD;
  putmsgopts PGM.MQPMO;
  getmsgopts PGM.MQGMO;
  options    binary_integer;
  putbuffer  raw(10) := '10203040506070809000';
  getbuffer  raw(10);

begin

  -- 
  -- Print the message we are putting on the queue
  --

  dbms_output.put_line('message put on queue = ' || rawtohex(putbuffer));

  --
  -- Specify queue name and dblink name (replace with proper names).
  --
  objdesc.objectname := 'YOUR_QUEUE_NAME';
  objdesc.dblinkname := 'YOUR_DBLINK_NAME';

  --
  -- Specify a put operation. 
  --

  options := pgm_sup.MQOO_OUTPUT;

  --
  -- Open the queue.
  -- 

  PGM.MQOPEN(objdesc, options, hobj);

  --
  -- Put the message buffer on the queue.
  --

  PGM.MQPUT(hobj, msgdesc, putmsgopts, putbuffer);

  --
  -- Define close options.
  --

  options := pgm_sup.MQCO_NONE;

  --
  -- Close queue.
  --

  PGM.MQCLOSE(hobj, options);

  --
  -- Specify a get operation.
  --

  options := pgm_sup.MQOO_INPUT_AS_Q_DEF;

  --
  -- Open queue.
  -- 

  PGM.MQOPEN(objdesc, options, hobj);

  --
  -- Get message from the queue.
  --

  getmsgopts.msglength := 10;
  PGM.MQGET(hobj, msgdesc, getmsgopts, getbuffer);

  --
  -- Define close options.
  --

  options := pgm_sup.MQCO_NONE;

  --
  -- Close the queue again.
  --

  PGM.MQCLOSE(hobj, options);

  -- 
  -- Print the result
  --

  dbms_output.put_line('message read back = ' || rawtohex(getbuffer));

exception

  --
  -- When no more messages... tell the user and close the queue.
  -- 

  when pgm_sup.NO_MORE_MESSAGES then
    dbms_output.put_line('Warning: No message found on the queue');
    options := pgm_sup.MQCO_NONE;
    PGM.MQCLOSE(hobj, options);

  --
  -- something else went wrong.. tell the user.
  -- 
  when others then
    dbms_output.put_line('Error: Procedural Gateway for IBM MQSeries verification
 script failed.');
    dbms_output.put_line(SQLERRM); 

end;
/