機械翻訳について

4 クライアント・アプリケーションの開発(SNAのみ)

次のセクションでは、TIPを呼び出してリモート・ホスト・トランザクションを制御する方法について説明します。 また、ゲートウェイ・トランザクションを準備して実行するためのステップも提供します。 前提は次のとおりです。

  • リモート・ホスト・トランザクション(RHT)は既に書かれている

  • RHTに対応するTIPは、「TIPの作成」で説明されているステップを使用して既に定義されています

    注意:

    ゲートウェイがIMS Connect用のTCP/IPサポートを使用している場合は、TIPの呼び出しとリモート・ホスト・トランザクションの制御については、「クライアント・アプリケーション開発(TCP/IPのみ)」を参照してください。

トピック:

クライアント・アプリケーションの概要

手順ゲートウェイ管理ユーティリティ(PGAU)は、提供する定義を使用して完全なTIPを生成します。 クライアント・アプリケーションは、リモート・ホスト・トランザクションにアクセスするためにTIPを呼び出すことができます。 「手続き型ゲートウェイ管理ユーティリティ」は、PGAUの使用について詳しく説明しています。

この概要では、TIPを呼び出してリモート・ホスト・トランザクションを制御するために必要な作業について説明します。

ゲートウェイはOracleデータベースからPL/SQLコールを受信し、APPCコールを発行してリモート・トランザクション・プログラムと通信します。 これを可能にするのは、次の3つのアプリケーション・プログラムです:

  • APPC対応のリモート・ホスト・トランザクション・プログラム

  • Transactionインタフェース・パッケージ、またはTIP。 TIPは、クライアントとゲートウェイ間の通信を処理し、COBOLとPL/SQL間のデータ型変換を実行するPL/SQLパッケージです。

    PGAUはあなたのために TIP仕様を生成します。 出荷されたサンプルでは、PGAUで生成されたパッケージはpgadb2i.pkbと呼ばれます。 この生成されたTIPには、リモート・トランザクション・プログラムにマップされる少なくとも3つの関数呼び出しが含まれます:

    • pgadb2i_initは、リモート・トランザクション・プログラムとの会話を初期化

    • pgadb2i_mainは、リモート・トランザクション・プログラムとアプリケーション・データを交換

    • pgadb2i_termは、リモート・トランザクション・プログラムとの会話を終了

    独自のTIPやデバッグを作成する場合は、TIPの詳細については「TIP内部」を参照してください。

  • TIPを呼び出すクライアント・アプリケーション。

    クライアント・アプリケーションは、入出力引数を持つ3つのTIP関数を呼び出します。 この例では、クライアント・アプリケーションは従業員番号empnoをリモート・トランザクションに渡し、リモート・トランザクションは従業員レコードemprecを送り返します。

「表4-1」は、CICS-DB2トランザクションの例を使用して、PL/SQLドライバ、TIP、およびゲートウェイ間の論理フローを示します。

表4-1 CICS-DB2のロジック・フロー例

クライアント・アプリケーション Oracle TIP ゲートウェイとリモート・トランザクション(メインフレーム)の間で確立されたプロシージャ

calls tip_init

PGAINITを呼び出します。

ゲートウェイは制御ブロックを設定し、APPC ALLOCATEを発行します。 メインフレーム・プログラムが開始されます。

calls tip_main

PGAXFERを呼び出してempnoを送信し、emprecを受信

ゲートウェイはAPPC SENDをメインフレームに発行します。 メインフレームRECEIVEが完了します。 メインフレームはアプリケーション・ロジックを実行し、APPC SENDをゲートウェイに戻します。 ゲートウェイはAPPC RECEIVEを発行します。受信が完了しました。 メインフレームはAPPC TERMを発行します。

calls tip_term

PGATERMを呼び出す

ゲートウェイは制御ブロックをクリーンアップします。

ゲートウェイを利用してリモート・ホスト・トランザクションとデータを交換するクライアント・アプリケーションは、それ自体のためにいくつかのタスクを実行し、そのためにTIPに他のタスクを実行するよう指示します。 したがって、クライアント・アプリケーションの設計者は、リモート・トランザクションの動作とTIPが交換を容易にする方法を知る必要があります。

以下のセクションでは、リモート・ホスト・トランザクションの動作の概要、この動作がクライアント・アプリケーションによってどのように制御されるか、TIP関数呼び出しとデータ宣言がクライアント・アプリケーションをサポートしてリモート・ホスト・トランザクションを制御する方法について説明します。 これらのセクションでは、クライアント・アプリケーションのためにTIPが行うことと、TIPがリモート・ホスト・トランザクションとのデータ交換を呼び出す方法についてのバックグラウンド情報も提供します。

クライアント・アプリケーションの準備

クライアント・アプリケーションの実行を準備するには、リモート・ホストのトランザクション要件を理解してから、次のステップを実行する必要があります:

  1. 関連するCOBOLレコード・レイアウト(コピーブック)をPGAUへの入力のためにゲートウェイ・システムに移動します。
  2. DEFINE DATADEFINE CALL、およびDEFINE TRANSACTION文を使用して、リモート・ホストのトランザクション・データとPGデータ・ディクショナリ(PG DD)への呼び出しを記述します。
  3. GENERATEを使用して、OracleデータベースでTIPを生成します。
  4. TIPパブリック関数を呼び出すクライアント・アプリケーションを作成します。
  5. 新しく作成したパッケージに権限を与えます。

リモート・ホストのトランザクション要件の理解

リモート・ホスト・トランザクション・プログラム(RTP)を参照して、以下を確認します:

  • さまざまなクライアント・アプリケーションでTIP呼び出しに必要なPL/SQLパラメータ

  • 呼び出しの順序

呼び出されるリモート・ホスト・トランザクション・プログラム(RTP)機能と、各呼び出しで交換されるデータを識別します。 次のように定義し、PG DDに格納します:

  • DEFINE DATA

  • DEFINE CALL

  • DEFINE TRANSACTION

具体的な定義ステップと、実際のTIPの作成と生成については、「TIPの作成」を参照してください。

TIP内容と目的

PGAU生成TIPの内容は、リモート・ホスト・トランザクションで使用可能なコールと交換されたデータを反映します。 このコンテンツを理解すると、TIPを呼び出すクライアント・アプリケーションを設計およびデバッグするときに役立ちます。

TIPはPL/SQLパッケージであるため、 2セクションがあります:

  • パッケージ仕様:

    • パブリック関数のプロトタイプとパラメータ、および

  • パッケージ本文:

    • プライベート関数と内部制御変数

    • パブリック・ファンクション

    • 最後のパブリック関数に続くパッケージの初期化。

TIPの目的は、許可されたすべてのリモート・トランザクション・プログラムの対話に対してPL/SQL呼び出し可能な公開関数を提供することです。 リモート・トランザクション・プログラムの相互作用は、1つ以上の PGAXFER RPC呼び出しを介して論理的に関連するデータ交換のグループです。 これは、概念的には、複数のフィールドが入力され、入力キーが押され、いくつかのフィールドがユーザーに返される画面またはメニューの対話に似ています。 さらに類推を行う:

  • ユーザーは、TIPまたはクライアント・アプリケーションに類似している可能性があります

  • 記入されるフィールドは、TIP関数呼び出しのINパラメータです

  • 返されるフィールドは、TIP関数呼び出しのOUTパラメータです

  • 画面またはメニューは、INOUTパラメータの組み合わせです

  • 押された入力キーは、PGAXFERリモート・プロシージャ・コール(RPC)にリンクされます

トランザクション呼び出しを構成するパラメータの実際のグループ化は、ユーザーによって定義されます。 ゲートウェイは、リモート・トランザクション・プログラムがTIP関数呼び出しの集合に対応する方法に制限を置かず、各呼び出しは多くのINOUTパラメータを持ちます。

PGAユーザーは、通常、リモート・トランザクション・プログラムごとに1つのTIPを持ちます。 TIP関数呼び出しをグループ化する方法と、各呼び出しで交換されるデータ・パラメータは、リモート・トランザクション・プログラムのサイズ、複雑さ、および動作によって異なります。

PL/SQLパッケージの動作については、Oracle Oracle Database PL/SQL言語リファレンスを参照してください。 以下の説明では、TIP内で実行する必要があるロジックについて説明します。 UNIXベースのシステムの場合はMicrosoft Windowsまたは$ORACLE_HOME/dg4appc/demo/CICSディレクトリの%ORACLE_HOME%\dg4appc\demo\CICS ディレクトリに用意されているサンプルTIPおよびドライバのファイル例を参照してください。

リモート・ホストのトランザクション・タイプ

データベース・ゲートウェイ・アプリケーションのパースペクティブからは、リモート・ホスト・トランザクションには主に3つのタイプがあります:

  • ワンショット

  • 永続的

  • multi-conversational

ワン・ショット取引

1つの従業員番号を受け取り従業員レコードを返す単純なリモート・トランザクション・プログラムは、従業員番号をINパラメータとして渡し、従業員レコードをOUTパラメータとして返す1つのコールを提供するTIPを持つことができます。 これとすべてのTIPによって、さらに2つの関数呼び出しを提供する必要があります:

  • リモート・トランザクション・プログラムのinit関数呼び出し

  • リモート・トランザクション・プログラムは関数呼び出しを終了

最も単純なTIPには、tip_inittip_maintip_termなどの3つのパブリック関数があります。

クライアント・アプリケーションは、tip_inittip_main、およびtip_termを連続して呼び出します。 リモート・サイトでの対応アクティビティは、リモート・トランザクション・プログラムの開始、データ交換、およびリモート・トランザクション・プログラムの終了です。

リモート・トランザクション・プログラムは、ゲートウェイから終了信号を受信する前に自身を終了することさえできます。 このシーケンスは通常であり、ゲートウェイ・ロジックによって通常処理されます。 このようなリモート・トランザクション・プログラムはワン・ショットと呼ばれます。

永続的なトランザクション

より複雑なリモート・トランザクション・プログラムには、2つの動作モードがあります: INQUIRYまたはレポーティング・モード、およびUPDATEモードがあります。 これらのモードには、2つのTIPデータ転送関数呼び出し: 1つはINQUIRY用、もう1つはUPDATE用です。 このようなTIPには、5つの公開機能があります。 次に例を示します。

  • tip_init

    これにより、リモート・トランザクション・プログラムとの通信が初期化されます。

  • tip_mode

    これは、モード選択パラメータを受け取り、取引プログラムを照会モードまたは更新モードにします。

  • tip_inqr

    これは、特定の従業員番号の従業員レコードを戻します。

  • tip_updt

    これは、特定の従業員番号の従業員レコードを受け入れます。

  • tip_term

    これにより、リモート・トランザクション・プログラムとの通信が終了します。

クライアント・アプリケーションはtip_inittip_modeを呼び出してリモート・トランザクション・プログラムを照会モードにし、従業員レコードをスキャンし、(クライアント・アプリケーションとエンドユーザーに知られている)属性の組み合わせを検索します。 照会呼び出しの一部のパラメータは、更新モードへの変更を通知するように設定され、クライアント・アプリケーションはtip_updtを呼び出してレコードを更新します。 クライアント・アプリケーションは最終的にtip_termを呼び出してリモート・トランザクション・プログラムを終了します。

リモート・サイトでの対応アクティビティは次のとおりです:

  • リモート・トランザクション・プログラムの開始

  • モード選択交換

  • ループ読書記録

  • 更新モードに切り替える

  • 1レコードを更新

  • リモート・トランザクション・プログラム終了

このようなリモート・トランザクション・プログラムは、終了するように通知されるまで相互作用するため、永続的プログラムと呼ばれます。

リモート・トランザクション・プログラムは、照会モードへの復帰を許可し、プロセス全体を無期限に繰り返すように書くことができます。

複数の会話型トランザクション

クライアント・アプリケーションは、あるトランザクションtran_Aから情報を取得し、続いて別のトランザクションtran_Bから情報を書き込むか、ルックアップする必要があります。 これは、適切に書かれたクライアント・アプリケーションとtran_Atran_BのTIPで可能です。 実際、単一のクライアント・アプリケーションによって任意の数のトランザクションが同時に制御される可能性があります。 すべてのトランザクションは読取り専用で、クライアント・アプリケーションはそれぞれからデータを取り出してローカルのOracleデータベースに統合するか、Oracleフォームに表示します。

あるいは、トランザクションは、クライアント・アプリケーションによってどの入力選択が供給されたかに応じて、異なるモードで動作するか、または異なるサービスを実行することができます。 たとえば、tran_Cの1つのインスタンスは1つのサービスを実行し、2つ目のインスタンスは2番目のサービスを実行します。 tran_Cの各インスタンスは、クライアント・アプリケーションとの固有の会話を持ち、各インスタンスは実行されるサービスの性質に応じて、独自の動作(ワン・ショットまたは永続)を持つことができます。

各リモート・ホスト・トランザクションのカスタマイズされたTIP

各リモート・ホスト・システムには、ユーザーが呼び出す可能性のある数百のリモート・トランザクション・プログラム(RTP)が含まれている場合があります。 各リモート・トランザクション・プログラムは異なり、異なるデータを渡し、異なる機能を実行します。 したがって、ユーザーと各リモート・トランザクション・プログラムとの間のインタフェースは、各リモート・トランザクション・プログラムのユーザー要件に特化してカスタマイズする必要があります。 トランザクション・インタフェース・パッケージは、このカスタマイズされたインタフェースを提供します。

リモート・サイトに、従業員データベースまたは他のファイルシステム内の従業員情報を管理するトランザクション・プログラムがあるとします。 リモート・ホスト内のリモート・トランザクション・プログラム名は、従業員トラッキングの場合はEMPTです。 EMPTは照会機能と更新機能の両方を提供し、これらのEMPT機能にアクセスして使用するには、異なるOracleユーザーが必要です。

一部のユーザーは、EMPTの照会のみの使用に制限されている場合がありますが、更新要件があるユーザーもあります。 Oracleユーザー・クライアント・アプリケーションをサポートするには、少なくとも3つの可能なTIPが存在する可能性があります:

  1. EMP_MGMTを使用して、EMPTリモート・トランザクション・プログラムのすべての機能へのアクセスを提供します。

  2. EMP_UPDTを使用して、EMPTリモート・トランザクション・プログラムの更新機能にのみアクセスします。

  3. EMP_INQRを使用して、EMPTリモート・トランザクション・プログラムのルックアップ機能にのみアクセスします。

これらのTIPへのエンドユーザーのアクセスは、Oracle権限によって制御されます。 リモート・ホストによってエンドユーザーに追加のセキュリティが課される可能性があります。

また、各TIPには、リモート・トランザクション・プログラム(EMPT)の名前と、EMPTとのAPPC会話を確立するのに十分なネットワーク情報がコード化されています。

クライアント・アプリケーションの要件

TIPを使用すると、クライアント・アプリケーションはリモート・ホスト・トランザクションに対応して制御する必要があります。 内容は次のとおりです。

  • クライアント・アプリケーションの初期化

  • ユーザー入力と出力

  • TIP初期化関数を使用したリモート・ホスト・トランザクションの初期化(オーバーライドありとなし)

  • TIPユーザー機能を使用したリモート・ホスト・トランザクション制御およびデータ交換

  • TIP終了機能を使用したリモート・ホスト・トランザクションの終了

    上記の3つのステップは、リモート・ホスト・トランザクションの要件に基づいて異なります。

  • 例外処理

  • クライアント・アプリケーションの終了

ワン・ショット・リモート・ホスト・トランザクション・クライアント・アプリケーションでは、次の作業が必要です:

  • 交換されるRHT/TIPデータ型を宣言します。 すべてのクライアント・アプリケーションは、TIPを使用してRHTと交換される変数を宣言する必要があります。 そのような変数のPL/SQLデータ型は、各RHTに対応するTIPで既に定義されており、クライアント・アプリケーションはその宣言でTIPデータ型を参照するだけでよい。 詳細については、「"TIP変数の宣言"」も参照してください。 これらの変数の正確な使用法の詳細については、TIP/RHTのTIPコンテンツ・ドキュメント・ファイルを参照してください。

  • TIP初期化関数を使用してRHTを初期化します。 TIPは、ゲートウェイ・サーバーに、デフォルトのRHT識別パラメータ(PG DDにRHTが定義されたときに提供され、生成時にTIP内でエンコードされたもの)を指定して、目的のRHTを持つ会話を初期化するか、TIP初期化関数が呼び出されると、ユーザーまたはクライアントのアプリケーションに渡されます。 詳細については、「"会話の初期化"」および「"TIP初期化のオーバーライド"」を参照してください。

  • TIPユーザー機能(1回の呼び出し)を使用してRHTとデータを交換します。 前述のように、ワン・ショット・リモート・ホスト・トランザクションは単一のデータ交換にしか対応せず、その交換が完了すると、RHTは単独で終了します。 したがって、クライアント・アプリケーションは、データ交換を行うためにユーザー定義のTIP関数を1回呼び出すだけで済みます。

    この呼び出しの正確な構文については、特定のTIP/RHTについては、%ORACLE_HOME%\dg4appc\demo\CICS\%ORACLE_HOME%\dg4appc\demo\CICS\のMicrosoft WindowsのTIPコンテンツ・ドキュメント・ファイルまたはUNIXベースのシステムの$ORACLE_HOME/dg4appc/demo/CICS/を参照してください。

    クライアント・アプリケーションは、TIP関数呼び出しを呼び出す前に、値をINまたはIN OUTの値に初期化する必要があります。 これらは、交換されるRHT/TIPデータ型を宣言したときに、上で宣言したのと同じ変数です。

    すべてのTIP関数呼び出しは0戻りコード値を返し、返されたすべてのユーザー・ゲートウェイ・データ値は関数パラメータで交換されます。 例外条件は必要に応じて発生し、例外ハンドラで傍受することができます。

    TIP関数呼び出しから戻ると、クライアント・アプリケーションはIN OUTまたはOUTパラメータ値を分析して操作できます。 これらは、交換されるRHT/TIPデータ型を宣言したときに、上で宣言したのと同じ変数です。

    TIPがリモート・ホスト・データのさまざまなタイプとフォーマットをどのように変換するかについては、「データ型変換」を参照してください。

  • TIP終了機能を使用してRHTを終了します。 アクセスされているRHTのタイプにかかわらず、TIPとの会話をクリーンアップして終了するには、TIP終了機能を呼び出す必要があります。 ワン・ショットRHTとの会話は、RHTが終了する前にゲートウェイ・サーバーから終了できます。 TIPもクリーンアップを実行する必要があります。 クリーンアップは、クライアント・アプリケーションの終了リクエスト時にのみ実行されます。

    クライアント・アプリケーションは、正常終了または異常終了をリクエストできます。

    詳細については、「"会話を終了"」を参照してください。

持続的なリモート・ホスト・トランザクション・クライアント・アプリケーションは:

  • 交換されるRHT/TIPデータ型を宣言します。 すべてのクライアント・アプリケーションは、TIPを使用してRHTと交換される変数を宣言する必要があります。 そのような変数のPL/SQLデータ型は、各RHTに対応するTIPですでに定義されています。クライアント・アプリケーションは宣言にTIPデータ型を参照するだけでよい。 詳細については、「"TIP変数の宣言"」を参照してください。 これらの変数の正確な使用法の詳細については、TIP/RHTのTIPコンテンツ・ドキュメント・ファイルを参照してください。

  • TIP初期化機能を使用してRHTを初期化します。 TIPは、ゲートウェイ・サーバーに、デフォルトのRHT識別パラメータ(PG DDにRHTが定義されたときに提供され、生成時にTIP内でエンコードされたもの)を指定して、目的のRHTを持つ会話を初期化するか、TIP初期化関数が呼び出されると、ユーザーまたはクライアントのアプリケーションに渡されます。 詳細については、「"会話の初期化"」および「"TIP初期化のオーバーライド"」を参照してください。

  • TIPユーザー機能を使用してRHTとデータを繰り返し交換します。 進行中または反復的な制御シーケンスを提供または必要とするリモート・ホスト・トランザクションは、RHTが対話型ユーザーまたは他の制御プログラムによって操作されるのと同じ方法でクライアント・アプリケーションによって制御されるべきです。 TIPとゲートウェイ・サーバーの介入はRHTの動作を変更しません。代わりに、TIPで定義されているさまざまな関数呼び出しを使用して、その動作の制御をクライアント・アプリケーションに拡張します。

    永続的なRHTは、1つまたは複数のTIP関数呼び出しで制御できます。 RHTは、たとえば、会話が明示的に終了するまで、すべての入力に対して出力をループして返すように設計されている場合があります。 あるいは、TIP関数がOUTパラメータのみを持つ複数の交換で結果を実行して返す操作のカウントまたはリストを入力として受け入れるように設計されている可能性があります。

    永続RHTは対話型でもよく、各出力は以前の入力選択によって指定され、対話がクライアント・アプリケーションによって明示的に終了されたときにのみ終了します。

    クライアント・アプリケーションで利用可能なTIP関数呼び出しは、特定のTIP/RHTのTIPコンテンツ・ドキュメント・ファイルに記述されています。

    RHTがTIPのINパラメータを解釈し、TIPのOUTパラメータを返す方法は、RHTから決定されるか、RHTプログラマによって説明されなければなりません。 TIPは、RHTのクライアント・アプリケーション制御を容易にするために関数呼び出しおよび交換されたパラメータ・データ型を提供し、RHTが実行するように指示された操作のシーケンスに制限または前提条件を課すことはない。 TIPは、RHTがPG DDで受け入れるように定義された呼び出しおよびデータ・パラメータをクライアント・アプリケーションに提供します。

  • TIP終了機能を使用してRHTを終了します。 アクセスされているRHTのタイプにかかわらず、TIPとの会話をクリーンアップして終了するには、TIP終了機能を呼び出す必要があります。 永続RHTとの会話は、RHTが終了する前にゲートウェイ・サーバーから終了することも、RHTが既に終了している可能性もあります。 TIPもクリーンアップを実行する必要があり、このクリーンアップはクライアント・アプリケーションの終了リクエスト時にのみ実行されます。

    クライアント・アプリケーションは、正常終了または異常終了をリクエストできます。

    詳細については、「"会話を終了"」を参照してください。

マルチ会話型リモート・ホスト・トランザクション・クライアント・アプリケーションは:

  • 交換されるRHT/TIPデータ型を宣言します。 すべてのクライアント・アプリケーションは、TIPを使用してRHTと交換される変数を宣言する必要があります。 このような変数のPL/SQLデータ型は、各RHTに対応するTIPですでに定義されており、クライアント・アプリケーションはその宣言にTIPデータ型を参照するだけでよい。 詳細については、「"TIP変数の宣言"」を参照してください。 これらの変数の正確な使用法の詳細については、TIP/RHTのTIPコンテンツ・ドキュメント・ファイルを参照してください。

  • 関係する各RHTを、TIP初期化関数を使用して初期化します。 特定のカスタマイズされたTIPは、PG DDで定義されている各RHTに存在します。 複数のRHTを制御するクライアント・アプリケーションはマルチ会話型であり、各RHTとその関連する会話を開始する必要があります。 これは、前と同じように各TIP初期化関数を呼び出すことによって行われます。複数のTIPが初期化されます。

    単一のRHTが1つまたは複数の呼び出し元に対して複数のサービスを実行するように設計されており、クライアント・アプリケーションがこのRHTを使用するように設計されている場合、そのRHTに対応するTIPはクライアント・アプリケーションによって複数回初期化できます。

    その後、クライアント・アプリケーションは、以下を使用して、制御下のアクティブなRHTと区別します:

    • 複数のTIP/RHTが制御されているときのTIPスキーマtipname.callname TIPユーザー・コールに同じTIPスキーマ名をエンコードすることで、クライアント・アプリケーションは、コールが行われているRHTを指定します。

    • 同じTIP/RHTの複数のインスタンスが制御されている場合のtranuse IN OUTパラメータ値。 これはTIP初期化関数呼び出しで返された値で、その後ユーザー定義のTIP関数呼び出しでINパラメータとして渡されます。 返されるtranuse値は、RHTの特定のインスタンスに接続された会話に対応します。 クライアント・アプリケーションは、TIPユーザー・コールに同じtranuse値を指定することにより、指定されたRHT呼び出しが行われているRHTインスタンスを指定します。

    クライアント・アプリケーション・ロジックは、どのRHTが開始され、どのTIPおよびtranuse値が開始RHTに対応しているかを記録しなければなりません。

  • 各RHTでデータを交換するには、TIPユーザー機能を使用するか、RHTがワン・ショットまたは永続的である場合は繰り返してください。 クライアント・アプリケーション・ロジックは、ユーザーがRHTを対話的に操作するのと同様に、適切なRHT操作に従って許可されたステップを経てRHTをシーケンスする必要があります。

    クライアント・アプリケーション・ロジックは、必要なクロスRHT結果分析またはデータ転送も実行する必要があります。 すべてのTIPは、互いに独立して実行されます。

    別のRHTへの入力として意図された1つのRHTからの出力は、最初のRHTからINまたはIN OUTパラメータとしてクライアント・アプリケーションで受信され、クライアント・アプリケーションから2番目のRHTにINまたはIN OUTパラメータとして送信されます。 すべてのTIP-to-RHT関数呼び出しはクライアント・アプリケーションによって実行されなければならず、交換されるデータ・パラメータはクライアント・アプリケーションによって変数として宣言されていなければなりません。 TIPは、クライアント・アプリケーションに必要なデータ型定義とRHT関数呼び出しの両方を提供します。

    TIP関数呼び出しの正確な構文および交換されるパラメータ・データ型の定義については、各TIP/RHTのTIPコンテンツ・ドキュメント・ファイルを参照してください。

  • TIP終了機能を使用して、初期化された各RHTを終了します。 RHTを終了するには、対応するTIP終了関数を呼び出してRHTとその会話を終了し、TIPクリーンアップを開始する必要があります。 終了するRHTは、そのTIPスキーマ名(データ交換関数呼び出しと同じスキーマ)と同じRHTの複数のインスタンスが終了しているときのtranuse値によって指定されます。

    RHTおよびそれに対応するTIPは、クライアント・アプリケーションが望む順序で終了することができ、初期化されたのと同じ順序で終了する必要はありません。

    注意:

    さまざまなTIPデータ交換変数関数呼び出しの特定の構文は、特定のRHTのPG DDで以前定義されていたものと同じであり、TIPコンテンツ文書file (tipname.doc)またはTIP仕様書ファイルを調べることによって調べることができます生成された。 RHTがアクセスされているためにまだTIPが生成されていない場合は、「TIPの作成」「"データ通信"」「"CALL対応"」、および「"TRANSACTION対応"」を参照してください。 ただし、必要に応じてクライアント・アプリケーションのリファレンス・ドキュメントを利用できるように、最初にTIPを定義して生成することをお勧めします。

TIPとリモート・トランザクション・プログラムの通信の確保

リモート・ホストのトランザクション・プログラムとそれに関連するクライアント・アプリケーションのTIPは、 2つの重要な要件に対応している必要があります:

  • パラメータDATAが定義されている方法に起因するパラメータのデータ型変換。 PGAUで生成されたTIPがデータ定義に基づいてデータをどのように変換するかについては、「データ型変換」を参照してください。

  • トランザクションCALLが定義されている方法から生じるAPPC送受信同期

これらのDATACALLの定義は、TRANSACTIONの定義で参照されます。

データ通信

PGAU DEFINE DATAコマンドは、リモート・ホスト・トランザクションの言語でプログラミングされたデータ定義を使用して、 PGAU GENERATEに必要な情報をPG DDに保存して、実行するTIP関数ロジックを作成します:

  • 受信リモート・ホスト・トランザクションによって提供されるPL/SQL INパラメータからのすべてのデータ変換

  • 受信側のリモート・ホスト・トランザクションによって予期されるフォーマットへのすべてのバッファリング

  • 送信側のリモート・ホスト・トランザクションによって提供されたフォーマットからバッファリングされていないすべてのデータ

  • 送信リモート・ホストのトランザクションによって提供されるPL/SQL OUTパラメータへのすべてのデータ変換

PGAUは、リモート・ホスト・トランザクション・プログラムに含まれるデータ定義から変換およびバッファリング・ロジックを生成するために必要な情報を決定します。 PGAU DEFINE DATAは、この情報をCOBOLコピーブックなどのファイルから、またはスクリプトからイン・ストリームに読み込み、繰り返し使用するためにPG DDに保存します。 ゲートウェイ管理者は、これらの定義ファイルをリモート・ホストからPGAUが実行されているOracleホストに転送する必要があります。

PG DDに格納されているデータ定義から、PGAU GENERATEはリモート・ホスト・データ型を判別し、それを適切なPL/SQLデータ型に一致させます。 また、レコードとバッファ内のデータ長とオフセットを決定し、必要なPL/SQLロジックをTIPに生成します。 詳細については、「手続き型ゲートウェイ管理ユーティリティ」のPGAUの"DEFINE DATA"文と「管理ユーティリティのサンプル」「"サンプルPGAU DEFINE DATA文"」文を参照してください。

後続の呼び出しでパラメータとして参照されるすべてのデータは、最初にPGAU DEFINE DATAを使用して定義する必要があります。 単一の数字や文字列などの単純なデータ・アイテムや、レコードや構造などの複雑なマルチ・フィールド・データ集約を定義することができます。 PGAUは、クライアント・アプリケーションが生成されたTIPへの呼び出しを参照するために、同等のPL/SQL変数とフィールドまたは表のレコードを自動的に生成します。

説明したように、パラメータは、従業員番号などの単純なデータ・アイテム、従業員レコードなどの複雑なアイテムです。 PGAU DEFINE DATAは、必要なデータ型情報を入力プログラムのデータ定義ファイルから自動的に抽出します。

この例では、empnoemprecは交換される引数です。

pgadb2i_main(trannum,empno,emprec)

したがって、これらのパラメータごとにPGAUのDEFINE DATA文を発行する必要があります:

DEFINE DATA EMPNO
       PLSDNAME (EMPNO)
       USAGE (PASS)
       LANGUAGE (IBMVSCOBOLII)
       (
       01 EMP-NO PIC X(6).
       ); 

DEFINE DATA EMPREC
       PLSDNAME (DCLEMP)
       USAGE (PASS)
       LANGUAGE (IBMVSCOBOLII)
       INFILE("emp.cob");

trannum引数には定義が必要ではないことに注意してください。 これはAPPC会話識別子であり、PGAUで定義する必要はありません。

CALL対応

APPC RECEIVERECEIVEを同期する必要があるということは、リモート・トランザクション・プログラムがデータ・パラメータの入力を期待すると、APPC RECEIVEを発行してデータ・パラメータを読み取ることを意味します。 したがって、TIPは、ゲートウェイに、リモート・トランザクション・プログラムにデータ・パラメータを書き込むためのAPPCコードを発行させる必要があります。 また、リモート・トランザクション・プログラムがAPPC SENDを発行したときに、ゲートウェイはAPPC SENDを発行する必要があります。

PGAUのDEFINE CALL文は、生成されたTIPがクライアント・アプリケーションによって呼び出される方法と、その呼び出しのためにリモート・ホスト・トランザクションと交換されるデータ・パラメータを指定します。 各PGAUのDEFINE CALL文は、TIP関数の名前、1つ以上のデータ・パラメータ、および各データ・パラメータのIN/OUTモードを指定することがあります。 データ・パラメータは、PGAUのDEFINE DATA文で事前に定義されていなければなりません。 詳細については、「手続き型ゲートウェイ管理ユーティリティ」"DEFINE CALL"および「管理ユーティリティのサンプル」「"サンプルPGAU DEFINE CALL文"」を参照してください。

PGAU DEFINE CALL処理は、PGAU GENERATEによって後で使用するために、指定された情報をPG DDに保管します。 PGAU GENERATEは、TIPパッケージ仕様で次を作成します:

  • CALLで指定された各DATA定義のPL/SQLパラメータで定義された各CALLのpublic PL/SQL関数の宣言

  • パブリックPL/SQLデータ・パラメータの宣言

クライアント・アプリケーションは、PGAU DEFINE CALL文で指定された関数名とパラメータ・リストを使用して、TIP public関数をPL/SQL関数呼び出しとして呼び出します。 また、クライアント・アプリケーションは、TIPパブリック・データ・パラメータと同じデータ型のプライベート変数を参照して宣言して、クライアント・アプリケーション内のデータの受け渡しや処理を容易にし、PGAU GENERATEによって作成された宣言を共有することもできます。

この例では、次のPGAU DEFINE CALL文を発行して、TIPパブリック関数を定義する必要があります:

DEFINE CALL DB2IMAIN
       PKGCALL (pgadb2i_main)
       PARMS ((empno IN),(emprec OUT));
フレキシブルなコール・シーケンス

各呼び出しでTIPとゲートウェイ間で交換されるデータ・パラメータの数は、リモート・トランザクション・プログラムのSEND/RECEIVEリクエストが満たされている限り、ユーザーの裁量で変更できます。 たとえば、リモート・トランザクション・プログラムのデータ交換シーケンスは、次のようになります:

APPC SEND    5 fields  (field1-field5)
APPC RECEIVE 1 fields  (field6)
APPC SEND    1 field   (field7)
APPC RECEIVE 3 fields  (field8 - field10)

結果のTIP/アプリケーション呼び出しシーケンスは次のようになります:

tip_call1(parm1 OUT,  <-- APPC SEND field1 from remote TP
         parm2 OUT,  <-- APPC SEND field2 from remote TP
         parm3 OUT); <-- APPC SEND field3 from remote TP

tip_call2(parm4 OUT,  <-- APPC SEND field4 from remote TP
         parm5 OUT); <-- APPC SEND field5 from remote TP
tip_call3(parm6 IN OUT); --> APPC RECEIVE field6 in remote TP
                         <-- APPC SEND field7 from remote TP

tip_call4(parm8 IN,   --> APPC RECEIVE field8 into remote TP
          parm9 IN,   --> APPC RECEIVE field9 into remote TP
          parm10 IN); --> APPC RECEIVE field10 into remote TP

これらの4つのパブリック関数をTIPに定義するには、それぞれ固有のパブリック関数名(tip_callx)と交換するデータ・パラメータ・リストを指定する4つのPGAU DEFINE CALL文を発行する必要があります。 DEFINE DATAを使用してデータ・アイテムを定義すると、任意のモード(INOUT、または IN OUT)の複数の呼び出しで参照することができます。 たとえば、parm5parm6の代わりに2回使用することができます。 これは、両方のインスタンスで同じデータが交換され、 tip_call2のTIPとアプリケーションで受信され、おそらく更新されたtip_call4のリモート・ホストに返されることを意味します。

また、リモート・トランザクション・プログラムの最初の5つのフィールドは、2つの別々のTIP関数呼び出し、tip_call1およびtip_call2によって読み取られます。 これは、それぞれ1つのOUTパラメータの5つのTIP関数呼び出し、または5つのOUTパラメータを持つ単一のTIP関数呼び出しでも同等に実行できます。 次に、リモート・トランザクション・プログラムの最初の読み取りフィールド(field6)と後続の書き込みフィールド(field7)は、単一のIN OUT パラメータ(parm6)を持つ単一のTIP関数呼び出し(tip_call3)に対応します。

この1つのIN OUTパラメータの使用は、field6およびfield7のリモート・トランザクション・プログラム・データ型が同じであり、parm6のデータ型に対して実行された変換に対応することを意味します。 field6field7が異なるデータ型であった場合、それらは異なるPL/SQLパラメータに対応する必要があります(たとえば、parm6 INparm7 OUT)。 ただし、1つのTIP呼び出しで2つのパラメータとして、または2つのTIP呼び出しでそれぞれ1つのパラメータとして交換できます。

最後に、残りの3つのRECEIVEフィールドのリモート・トランザクション・プログラムは、tip_call4パラメータ8〜10によって提供されます。 また、3つのTIPコールで1つのパラメータを渡すことも、2つのTIPコールを1つのコールで1つのパラメータを渡し、2つのパラメータをどちらかの順序で渡すこともできます。 この柔軟性により、ユーザーは、ユーザーに最も適した方法で、リモート・トランザクション・プログラム動作とTIP機能コールとの間の対応関係を定義することができます。

連絡文書のオーダー制限を呼び出す

各TIP公開関数は、OUTパラメータを受け取る前に、まずすべてのINパラメータを送信します。 したがって、1つのフィールドを送信し、次に1つのフィールドを受信することを予期するリモート・トランザクション・プログラムは、別個のTIP呼び出しに対応しなければならない。

次に例を示します。

tip_callO( parmO OUT); <-- APPC SEND outfield from remote TP

PGAXFER RPCは最初に送信するパラメータをチェックしますが、見つからずパラメータを受け取るようになります:

tip_callI( parmI IN);  --> APPC RECEIVE infield to remote TP

PGAXFER RPCは、送信するパラメータを処理し、受信するパラメータをチェックしますが、noneとcompletesを検出します。したがって、OUTパラメータとそれに続くINパラメータを持つ単一のTIP public関数は動作しません。これは、パラメータ・リスト内の位置に関係なく、INパラメータが最初に処理されるためです。

TRANSACTION対応

リモート・ホスト・トランザクションは、PGAU DEFINE TRANSACTION文で定義され、トランザクションがサポートするCALLの以前の定義への追加参照があります。

次のようなリモート・ホスト・トランザクション属性を指定します:

  • トランザクションIDまたは名前

  • ネットワーク・アドレスまたはロケーション

  • システム・タイプ(IBM370など)

  • リモート・ホストのOracleナショナル・ランゲージ

    注意:

    PL/SQLパッケージ名は、トランザクションの定義時に指定されます。これは、TIPが参照される名前であり、TIPに含めるためにpublic関数が呼び出す名前です。 各パブリック関数は、PG DDに格納されているPGAUのDEFINE CALL文で事前に定義されていなければなりません。 GENERATE文にパッケージ名(TIP名)を指定しないと、指定したトランザクション名がデフォルトでパッケージ名になります。 その場合、トランザクション名(tname) は一意でなければならず、PL/SQLパッケージを含むデータベース内の有効なPL/SQL構文でなければなりません。

    詳細については、「手続き型ゲートウェイ管理ユーティリティ」"DEFINE TRANSACTION"および「管理ユーティリティのサンプル」「"サンプルPGAU DEFINE TRANSACTION文"」を参照してください。

この例では、次のDEFINE TRANSACTION文を使用して、DB2IというリモートCICSトランザクションを定義します:

DEFINE TRANSACTION DB2I
   CALL (   DB2IMAIN,
            DB2IDIAG   )
   SIDEPROFILE(CICSPROD)
   TPNAME(DB2I)
   LOGMODE(ORAPLU62)
   SYNCLEVEL(0)
   NLS_LANGUAGE("AMERICAN_AMERICA.WE8EBCDIC37C");

クライアント・アプリケーションからTIPを呼び出す

TIPが作成されたら、クライアント・アプリケーションをTIPとのインタフェースに書き込む必要があります。 TIP関数を呼び出すクライアント・アプリケーションには、5つの論理セクションが含まれている必要があります:

  • TIP変数を宣言

  • 会話を初期化

  • データの交換

  • 会話を終了

  • エラー処理

TIP変数の宣言

tipname.docファイルのユーザー宣言セクションは、必要な宣言を文書化します。

TIP関数の呼び出しでPL/SQLパラメータを渡す場合、クライアント・アプリケーションは、TIP関数の引数には、仕様セクションのTIPで定義されているものとまったく同じPL/SQLデータ型を使用する必要があります。 たとえば、以下がTIP仕様、またはtipname.doc:にあるとします

FUNCTION tip_call1    tranuse,   IN      BINARY_INTEGER, 
                      tip_var1   io_mode pls_type1, 
                      tip_record io_mode tran_rectype) 
RETURN INTEGER;

TYPE  tran_rectype is RECORD
      (rec_field1 pls_type1,
      ...
      rec_fieldN pls_typeN);

「表4-2」は、関数宣言の説明を提供します:

表4-2関数宣言

項目 説明

tip_call1

パッケージ仕様で定義されているTIP関数名。

tranuse

このTIP呼び出しがデータを交換する会話を識別するTIP init関数から返されたリモート・トランザクション・インスタンス・パラメータ。

tran_rectype

tipname TIP仕様で宣言されたPL/SQLレコード・データ型。 これは、TYPEtran_rectype is RECORD文と同じ値です。

pls_typeN

PL/SQLアトミック・データ型です。

rec_fieldN

PL/SQLレコード・フィールドは、リモート・トランザクション・プログラム・レコード・フィールドに対応しています。

クライアント・アプリケーションでは、PL/SQLアトミック・データ型は、TIP関数定義の対応する引数とまったく同じデータ型として定義する必要があります。 BEGINコマンドの前に、次のコードをクライアント・アプリケーションでコーディングする必要があります:

appl_var  pls_type1;    /* declare appl variable for ....  */

TIPデータ型を再定義する必要はありません。 BEGINの前にクライアント・アプリケーションに表示される、クライアント・アプリケーション内でlocallyとして宣言されている必要があります:

appl_record tipname.tran_rectype;  /* declare appl record */

「表4-3」はコマンドライン引数を記述します:

表4-3コマンドライン引数

項目 説明

tip_call1

パッケージ仕様で定義されているTIP関数名。

tranuse

このTIP呼び出しがデータを交換する会話を識別するTIP init関数から返されたリモート・トランザクション・インスタンス・パラメータ。

tran_rectype

tipname TIP仕様で宣言されたPL/SQLレコード・データ型。 これは、TYPE tran_rectype is RECORD文と同じ値です。

参照可能なユーザー宣言の完全な説明については、tipname .docコンテンツ・ファイルを参照してください。

クライアント・アプリケーションは、ローカルのPL/SQL関数のようにTIP public関数を呼び出します:

rc = tip_call1( tranuse,
                appl_var,
                appl_record);

CICS-DB2の照会の例では、PL/SQLドライバpgadb2id.sql (%ORACLE_HOME%\dg4appc\demo\CICSディレクトリにMicrosoft Windowsディレクトリに配置されているおよびUNIXベースのシステム用に$ORACLE_HOME/dg4appc/demo/CICSディレクトリがクライアント・アプリケーションであり、次の宣言が含まれています:

...
...
CREATE or REPLACE PROCEDURE db2idriv(empno IN CHAR) IS
tranuse INTEGER :=0               /* transaction usage number     */
DCLEMP PGADB2I.DCLEMP_typ;        /* DB2 EMP row definition       */
DB2 PGADB2I.DB2_typ;              /* DB2 diagnostic information   */
rc INTEGER :=0                    /* PGA RPC return codes         */
line VARCHAR2(132);               /* work buffer for output       */
term INTEGER :=0;                 /* 1 if pgadb2i_term called     */
...
...

会話の初期化

の呼び出しは、会話を初期化するためにいくつかの目的を果たします:

  • PL/SQLパッケージ(TIP)をロードし、TIP初期化セクションでプログラミングされた初期化ロジックを実行するには。

  • TIP init関数がPGAINITリモート・プロシージャ・コール(RPC)を呼び出すと、リモート・トランザクション・プログラム(RTP)との通信が確立され、トランザクション・インスタンス番号がアプリケーションに返されます。

オプションで、会話を初期化するための呼び出しを使用して、次のことを行うことができます:

  • デフォルトのRHT/OLTP識別、ネットワーク・アドレス属性、会話セキュリティのユーザーIDとパスワードを上書きします。

  • TIPが生成する診断トレースを指定します。 診断トレースの詳細については、「トラブルシューティング」を参照してください。

PGAUで生成されたTIPは、クライアント・アプリケーションが呼び出すことができる4つの異なる初期化関数を提供します。 これらはすべて同じ名前の関数がオーバーロードされますが、渡されるパラメータの型は異なります。

3つの初期化パラメータが渡されます:

  • RHT会話識別のトランザクション・インスタンス番号。 tranuseパラメータは、すべてのTIP初期化で必要です。

  • TIPランタイム診断コントロールのTIP診断フラグ。 tipdiagパラメータはオプションです。 TIP診断については、「トラブルシューティング」を参照してください。

  • TIPのデフォルトの上書きは、OLTP属性とネットワーク属性を上書きします。 overrideパラメータはオプションです。

以下の4つの機能は、TIPコンテンツのドキュメント・ファイルに表示されるように表示されています。 クライアント・アプリケーションの使用例については後で説明します。

TYPE override_Typ IS RECORD (
        tranname  VARCHAR2(255),  /* Transaction Program     */
        transync  BINARY_INTEGER, /* RESERVED                */
        trannls   VARCHAR2(50),   /* RESERVED                */
        oltpname  VARCHAR2(255),  /* Logical Unit            */
        oltpmode  VARCHAR2(255),  /* LOG Mode Entry          */
        netaddr   VARCHAR2(255),  /* Side Profile            */
        oltpuser  VARCHAR2(8),    /* userid for OLTP access  */
        oltppass  VARCHAR2(8));   /* password for OLTP access*/

FUNCTION pgadb2i_init(                /* init standard */
           tranuse IN OUT BINARY_INTEGER)
           RETURN INTEGER;

FUNCTION pgadb2i_init(                /* init override */
           tranuse IN OUT BINARY_INTEGER,
           override IN override_Typ)
           RETURN INTEGER;

FUNCTION pgadb2i_init(               /* init diagnostic */
           tranuse IN OUT BNARY_INTEGER,
           tipdiag IN CHAR)
           RETURN INTEGER;

FUNCTION pgadb2i_init(                /* init over-diag */
           tranuse IN OUT BINARY_INTEGER,
           override IN override_Typ,
           tipdiag IN CHAR)
           RETURN INTEGER;
トランザクション・インスタンス・パラメータ

このトランザクション・インスタンス番号(例ではtranuse)は、後続のTIP交換および終了機能に渡す必要があります。 ゲートウェイは、APPC会話(したがって、リモート・トランザクション・プログラムの反復)がデータが送信されるか、通信が終了するかを識別します。

単一のクライアント・アプリケーションが、同じリモート・トランザクション・プログラムまたは複数の異なるリモート・トランザクション・プログラムの複数のインスタンスを同時に制御する可能性があります。 トランザクション・インスタンス番号は、クライアント・アプリケーション・コールをゲートウェイを介して意図されたリモート・トランザクション・プログラムにルーティングするためのTIPのメカニズムです。

各アクティブ・トランザクションのトランザクション・インスタンス番号を保存し、そのトランザクションのために呼び出される各TIP関数に正しいものを渡すのはクライアント・アプリケーションの責任です。

クライアント・アプリケーションは、ローカルのPL/SQL関数のようにTIP初期化関数を呼び出します。 次に例を示します。

...
...
tranuse INTEGER := 0;/* transaction usage number*/
...
...
BEGIN
 rc := pgadb2i.pgadb2i_init(tranuse);
...
...
TIP初期化のオーバーライド

前述の例では、クライアント・アプリケーションはリモート・トランザクション・プログラム名、ネットワーク接続、またはセキュリティ情報を指定していないことに注意してください。 TIPはそのような情報を内部的にデフォルトとしてコード化しており、クライアント・アプリケーションは選択されたリモート・トランザクション・プログラムに対して適切なTIPを単に呼び出すだけです。 ただし、クライアント・アプリケーションは、オプションでTIPのデフォルトを上書きしてセキュリティ情報を提供することもできます。

上書きを必要としないクライアント・アプリケーションを変更する必要はありません。

リモート・ホスト・トランザクションがPG DDで定義されている場合、DEFINE TRANSACTION文は、デフォルトのOLTPおよびネットワーク識別属性を指定しました。これらの属性はオーバーライドできます:

  • TPname

  • LUname

  • LOGMODE

  • Side Profile

DEFINE TRANSACTION 文の詳細については、「手続き型ゲートウェイ管理ユーティリティ」"DEFINE TRANSACTION"を参照してください。

これらのPG DD定義のトランザクション属性は、デフォルトとしてTIPに生成され、TIP初期化時にオーバーライドできます。 これにより、テスト・トランザクションまたはシステムで使用できる1つのTIPの使用が容易になり、後でTIPを再生成することなく、本番トランザクションまたはシステムで使用することができます。

override_Typレコードのデータ型は、クライアント・アプリケーションによってオーバーライドされるさまざまなトランザクション属性を記述します。 現在、次の 上書きがサポートされています:

  • trannameは、DEFINE TRANSACTION 文のTPNAMEパラメータで指定された値をオーバーライドするように設定できます

  • oltpnameは、DEFINE TRANSACTION文のLUNAMEパラメータで指定された値をオーバーライドするように設定できます

  • oltpmodeは、DEFINE TRANSACTION文のLOGMODEパラメータで指定された値をオーバーライドするように設定できます

  • netaddrは、DEFINE TRANSACTION文のSIDEPROFILEパラメータで指定された値をオーバーライドするように設定できます

PG DDで定義されているトランザクション属性に加えて、会話セキュリティ・ユーザーIDと会話セキュリティ・パスワードの2つのセキュリティ関連パラメータがあり、TIP初期化時に上書きできます。 これらのパラメータの値は、通常、ゲートウェイへのアクセスに使用されるデータベース・リンクまたはOracleデータベース・セッションのいずれかから取得されます。 OracleデータベースのユーザーIDがOLTPシステムにアクセスするのに十分でない場合があります。 ユーザーIDとパスワードの上書きは、これらのパラメータをOLTPシステムに指定する方法を提供します。

現在、次のオーバーライドがサポートされています:

  • oltpuserは、OLTPとの会話を初期化するために使用されるユーザーIDを無効にするように設定できます

  • oltppassは、OLTPとの会話を初期化するために使用されるパスワードを無効にするように設定できます

セキュリティ・オーバーライドは、PGA_SECURITY_TYPE=PROGRAMがゲートウェイ初期化ファイルで指定され、OLTPシステムが着信対話リクエストでユーザーIDとパスワードを受け入れるように構成されている場合にのみ有効です。

transync (APPC SYNCLEVEL)およびtrannls (グローバリゼーション・サポート・キャラクタ・セット)は、オーバーライド・レコード・データ型で定義されますが、将来の使用のために予約されています。 RHTのSYNCLEVELおよびグローバリゼーション・サポート名は、オーバーライドできません。

次の理由により、クライアント・アプリケーションはTIPの初期化時にデフォルトの属性を上書きする可能性があります:

  • 別のバージョンのRHTを開始する(テストの代わりにプロダクションなど)

  • RHTを含むOLTPのロケーションを変更する(OLTPが移動またはバックアップ構成への切り替えによって移動された場合)

オーバーライドを必要とするクライアント・アプリケーションでは、オーバーライド・パラメータと初期化パラメータの任意の組み合わせを使用することができ、TIPを再生成したり、パラメータをオーバーライドしないアプリケーションに影響を与えることなく、。

TIPのデフォルトをオーバーライドするには、追加のクライアント・アプリケーション・レコード変数をoverride_Typデータ型として宣言し、値をオーバーライド・サブ・フィールドに割り当てる必要があり、オーバーライド・レコード変数をクライアント・アプリケーションからのTIP初期化呼び出しで渡す必要があります。

次に例を示します。

   ...
   ...
   my_overrides pgadb2i.override_Typ;   -- declaration
   ...
   ...
   my_overrides.oltpname := 'CICSPROD'; -- swap to production CICS
   my_overrides.tranname := 'TNEW';     -- new transaction name

BEGIN
   rc := pgadb2i.pgadb2i_init(tranuse,my_overrides); -- init
   ...
   ...

TIP内で、上書き属性の構文上の問題がチェックされ、ゲートウェイ・サーバーに渡されます。

セキュリティに関する考慮事項

デフォルトおよびオーバーライドされたOLTPの セキュリティ要件は、PGA RPC呼び出しのデータベース・リンク名によって決まるため、いずれの会話でも同じゲートウェイ・サーバーが使用されるため、同じにする必要があります。 ゲートウェイ・サーバーの起動セキュリティ・モードは、ゲートウェイ・サーバーの初期化時に設定され、TIPまたは会話の初期化時にOLTPにそのまま渡されます。

データの交換

クライアント・アプリケーションは、以前のtip_init呼び出しから返されたトランザクション・インスタンス番号を渡して、影響を受けるリモート・トランザクション・プログラムを識別し、リモート・トランザクション・プログラムと交換されるクライアント・アプリケーション・データ・パラメータを識別する必要があります。

このCICS-DB2照会の例では、従業員番号を渡して従業員レコードを戻します:

rc = pgadb2i.pgadb2i_main(tranuse, /* transfer data         */
                           empno,   /* employee number       */
                           DCLEMP); /* return employee record*/

会話を終了

クライアント・アプリケーションは、ローカルのPL/SQL関数のようにTIP終了関数を呼び出します。 次に例を示します。

...
...
term := 1;    /* indicate term called* */
 rc := pgadb2i.pgadb2i_term(tranuse,0); /* terminate normally  */
...
...

トランザクションを終了するためにトランザクション・インスタンス番号がTIP終了コールに渡された後、またはリモート・トランザクション・プログラムが異常終了した後、その特定のトランザクション・インスタンス番号を忘れる可能性があります。

エラー処理

クライアント・アプリケーションには、クライアント・アプリケーションが終了する前にアクティブなAPPC会話をクリーンアップできる例外ハンドラが含まれている必要があります。 pgadb2id.sqlで提供されているサンプル・クライアント・アプリケーションには、例外処理の例が含まれています。

ゲートウェイの例外は、PGA-20900からPGA-20999の範囲で報告されます。 例外が発生した場合、TIP初期化関数への以前の呼び出しによって開始されたアクティブな会話に対して、TIP終了関数を呼び出す必要があります。

次に例を示します。

EXCEPTION
 WHEN OTHERS THEN
  IF term = 0 THEN         /* terminate function not called yet */
   rc := pgadb2i.pgadb2i_term(tranuse,1); /*terminate abnormally*/
  END IF;
 RAISE;
...
...

リモート・トランザクションには、デバッグ情報をCICS一時記憶域キュー領域に書き込むなど、エラー処理とデバッグのための規定も含まれている必要があります。 Oracleの例外を傍受して処理する方法については、Oracle Database PL/SQL言語リファレンスを参照してください。

実行権限の付与

TIPは標準のPL/SQLパッケージであり、クライアント・アプリケーションからTIPを呼び出すユーザーに実行権限を与える必要があります。 この例では、PGADB2IパッケージのexecuteをユーザーSCOTTに付与します:

GRANT EXECUTE ON PGADB2I TO SCOTT

詳細については、Oracle Database管理者ガイドを参照してください。

アプリケーションの実行

クライアント・アプリケーションを実行する前に、ホストへの接続が確立され、受信パートナが使用可能であることを確認してください。 この例では、PL/SQL driver DB2IDRIVを使用してCICS-DB2照会を実行します。 このクライアント・アプリケーションを実行するには、SQL*Plusから次のように入力します:

set serveroutput on
execute DB2IDRIV('nnnnnn');

APPC会話の共有

複数のTIPは、同じ会話を共有している1つ以上のRemote Host Transactions (RHT)と同じAPPC会話を共有できます。 この機能には2つの利点があります:

  • 会話の制御を渡すことに依存する既存のRHTは、Oracle Database Gateway for APPCによってサポートされています。

  • そうでなければPL/SQLのコンパイルには大きすぎるTIPは、RHTに変更を加えることなく、クライアント・アプリケーションに同じ関数呼び出しとデータ定義のセットを提供する、より少ないユーザー定義関数を持つ複数の小さなTIPに分けることができます。

APPC会話の共有の概念

IMSなどのメインフレームのOLTPでは、トランザクションが別のトランザクションを呼び出すときにトランザクションを渡すことで、トランザクションが単一のAPPC会話を共有することができます。 RHTはPGAUが呼び出し、入力、出力を持つ単一のトランザクションとしてPGAUに定義され、PGAUはその特定のRHTに対応する初期化、転送、および終了機能を持つ単一のTIPを生成します。

TIPごとに生成されるロジックは、そのTIPが次のいずれかを可能にします:

  • init関数が呼び出されたときに新しい会話を開始する、または

  • そのユーザー定義関数が呼び出されたときに既存の会話でデータを転送

  • その"用語"機能が呼び出されたときに既存の会話を終了させる。

APPC会話は、複数のTIPによって共有され管理されるリソースとして扱われます。 どんなTIPもAPPC会話の唯一のユーザーであるという要件はありません。

3.4.0以降で生成されたTIPは、次のいずれかのサービスの組み合わせを実行できます:

  • 起動

  • 開始して転送

  • 開始、転送、および終了(標準操作)

  • transfer

  • 転送して終了

  • 終了

  • 開始して終了する(他のTIPが転送を実行することを前提とする)

単一のAPPC会話は、次の方法で共有できます:

  • 1つのTIPから複数のRHTへ

  • 複数のTIPから1つのRHTへ

  • 複数のTIPから複数のRHTへ

APPC会話共有がなければ、クライアント・アプリケーションが呼び出す必要のあるすべてのRHTのすべての機能とデータを含む単一のTIPを定義する必要があります。 RHTのスーパーセットを持つTIPを作成すると、そのようなTIPがPL/SQLがコンパイルするには大きすぎることがよくあります。

逆に、APPC会話共有では、各RHT (または複数の異なるデータ交換操作を実行するRHTのそれぞれのRHTデータ交換)も、PL/SQLコンパイル制限を超えて小さくなる単一のTIPで定義できます。

APPC会話の共有の使用

APPC会話共有は、3.4.0以降で生成されたすべてのTIPで自動的に使用できます。 3.4.0より前に生成されたTIPは、APPC会話の共有に参加できません。 3.4.0より前に生成されたTIPは、PGAU 3.4.0を使用して再生成する必要があります。APPC会話の共有に参加することができます。 再生成されたTIP本文(tipname .pkb)のみが再コンパイルされていれば、PGAUは上位互換性があり、再生成は透過的でなければなりません。 TIP仕様も再コンパイルされている場合、クライアント・アプリケーションも再コンパイルが必要です。 詳細については、「TIP内部」を参照してください。

TIPの定義と生成は、第1章、第2章、第3章ですでに説明したとおりに行われます。 追加のオプションやパラメータを指定する必要はありません。

APPC会話共有の実行時使用は、クライアント・アプリケーションの制御下にあります。 これは、会話を共有するTIPのうちの1つのinit関数を呼び出し、返されたtranuse値をそれぞれが所望の順序で呼び出されるときに他のTIP関数に渡すことによって達成される。 すべてのTIPが同じDEFINE TRANSACTION TPNAMEまたはSIDEPROFILE値で定義されている場合は、任意のTIP init関数を使用できます。 TPNAMEまたはSIDEPROFILEの値は、どのRHTを初期化するかを指定します。

会話を初期化するためにAPPC会話共有可能TIPのinit関数が呼び出されると、返されたtranuse値は会話共有が有効であることを示します。 他のTIPで関数を呼び出すときに同じtranuse値を渡すことで、他のTIPは、関連するすべてのTIPがバージョン3.4.0以降で生成されていれば、既に初期化された同じ会話で転送を実行します。

APPC会話共有TIP互換性

データベース・ゲートウェイの3.4.0以降で生成されたTIPは、3.4.0より前のTIPよりもtranuseに異なる値を使用します。 3.4.0より前のTIPを使用して会話を初期化し、そのtranuse値が3.4.0以降の生成されたTIPに渡された場合、次の例外が発生します:

ORA-20704 PGA_TIP: tranuse value cannot be shared

しかし、3.4.0より前に生成されたTIPは、共有された対話のための異なるtranuse値を検出しません。そのため、予期しないエラーが発生する可能性があります。

注意:

共有会話で呼び出されるすべてのTIPは、3.4.0以降で生成されている必要があります。

3.4.0より前に生成されたTIPは、APPC会話の共有に参加できません。

tranuseの値は、3.4.0より前のリリースと3.4.0以降のリリースとの間で互換性がありません。 これは、次の理由であなたのために問題を引き起こすべきではありません: 3.4.0より前には、TIPで定義されたすべてのRHT関数がそのTIP関数を通して呼び出されなければならず、その同じTIPのinit関数が最初に呼び出されて会話が初期化されなければなりませんでした。 tranuseの値は、それを初期化したTIPに対してのみ有効でした。 したがって、プログラミングを変更しない限り、既存のアプリケーションで誤ってtranuseの値を混在させることはできません。

3.4.0より前のTIPとクライアント・アプリケーションは変更なしで引き続き使用でき、古いクライアント・アプリケーションは変更なしで新しい3.4.0以降のTIPを呼び出すことができます。 これは、古いTIP本文が再生成され、コンパイルされたときに可能になります。古いクライアント・アプリケーションが変更されていなくても、TIPはAPPC会話の共有が可能になりました。

3.4.0より前のTIPの機能のどれもAPPC会話を共有することはできません。 ただし、TIPが3.4.0以降で再生成されると、その機能のいずれかがAPPCの会話を共有できます。

大きすぎるTIPのAPPC会話共有

会話共有を使用して、コンパイルするには大きすぎるTIPを回避することができます。 これは'PLS-00123 - package too large to compile'、またはPL/SQLコンパイルのようなその他の問題の症状によって識別されます。 この場合、元のTIPから削除する関数呼び出しを選択し、新しいTIPを定義する必要があります。

具体的には、どの PGAU DEFINE CALL文とそれに関連する DEFINE DATA文を古いPGAU制御ファイル(.ctl)から1つ以上の新しいPGAU制御ファイルに移動するかを決定する必要があります。 さらに、各新しいTIPを定義する新しいPGAU制御ファイルにどのP GAU DEFINE TRANSACTION文を含めるべきかを決定する必要があります。

いくつかのPGAU文を考慮する必要があります。PGAU文のリストとその説明については、「表4-4」を参照してください:

表4-4 PGAUのステートメント

説明

DEFINE DATA

一意である必要があります。 DEFINE CALL文で参照される前に、プロシージャ・ゲートウェイ・データ・ディクショナリ(PG DD)に定義されていれば、影響を受けるすべてのPGAU制御ファイルで共有することができます。 これらの文に変更は必要ありません。

DEFINE CALL

一意である必要があります。 DEFINE TRANSACTION文で参照される前にPG DDに定義されていれば、それらが含まれているTIPの新しいDEFINE TRANSACTION文によってのみ参照される必要があります。 DEFINE CALL文は、オプションで、それらが含まれているTIPの新しいPGAU制御ファイルに移動できます。

DEFINE TRANSACTION

新しいTIPが必要な場合にそれぞれ指定され、以前の大きなTIPから新しいTIPに移動した呼び出し定義を参照します。 トランザクション属性は変更されません。 これにより、新しいTIPは、以前の大きなTIPと同じRHTで同じ初期化または終了を実行できます。 以前の大きなTIPの古いDEFINE TRANSACTION文は、新しい小さなTIPに移動されているすべての呼び出し定義を除外するようになりました。

APPC会話の共有の例

RHT ABCの存在を仮定し、RHT Aはメニュー選択を実行し、問合せ機能の場合はRHT Bを呼び出し、選択関数の後の更新の場合はRHT Cを呼び出します。

次のDATACALLを定義できます:

  • DEFINE DATA choice ...

  • DEFINE DATA input ...

  • DEFINE DATA answer ...

  • DEFINE DATA record ...

  • DEFINE CALL menu_A callname(pick) parms(choice in);

  • DEFINE CALL query_B callname(query) parms((input in), (answer out));

  • DEFINE CALL update_C callname(update) parms(record in);

  • DEFINE CALL select_C callname(select) parms(record out);

以下のTIPの例を定義することができます:

例1

この例では、APPC会話共有は使用しませんが、RHTs ABCの機能を組み合わせて、リリース3.4.0より前に作成された有効なTIP定義です。

DEFINE TRANSACTION rhtABC calls(menu_A, 
                                query_B, 
                                update_C, 
                                select_C) 
                          tpname(RHTA);   

このTIPにはすべてのデータ定義と呼び出しが含まれており、コンパイルするには大きすぎる可能性があります。 このTIPでは、1つのTIP、rhtABCのみが存在するため、APPC会話共有は使用されません。 ただし、RHTはリモート・ホストで会話の通常の共有を実行します。 TIPがコンパイルできるほど小さい場合、クライアント・アプリケーションはTIP関数を次のように呼び出します:

rc := rhtABC.rhtABC_init(tranuse); 
rc := rhtABC.pick(tranuse, choice); 
rc := rhtABC.query(tranuse, input, answer); 
rc := rhtABC.update(tranuse, record); 
rc := rhtABC.select(tranuse, record); 
rc := rhtABC.rhtABC_term(tranuse); 

例2

この例では、RHT AB、およびCの機能を3つのTIPに分けて、APPC会話共有を使用して一連のTIPを定義する方法を示します:

DEFINE TRANSACTION rhtA calls(menu_A)   tpname(RHTA); 
DEFINE TRANSACTION rhtB calls(query_B)  tpname(RHTA); 
DEFINE TRANSACTION rhtC calls(update_C, 
                              select_C) tpname(RHTA); 

各TIPには必要なコールとデータだけが含まれ、各TIPは自動的にAPPC会話の共有を実行します。 クライアント・アプリケーションは、以下のようにこれらの関数を呼び出します:

rc := rhtA.rhtA_init(tranuse); 
rc := rhtA.pick(tranuse, choice); 
rc := rhtB.query(tranuse, input, answer); 
rc := rhtC.update(tranuse, record); 
rc := rhtC.select(tranuse, record); 
rc := rhtB.rhtB_term(tranuse); 

2つの例の唯一のクライアント・アプリケーションの違いは、各TIP呼び出しのスキーマ修飾子にあります。 これは、呼び出される関数が異なるTIPにあり、データベース内に異なるパッケージ名を持つためです。

APPC会話の共有を使用するためには、新しいDEFINE TRANSACTION文のみが必要でした。 CALLDATAの定義はそのまま使用されていました。 これは、古いTIP rhtABCがまだ定義されていて、まだコンパイルするには大きすぎる可能性があることを意味します。

例3

サンプル2を実行したが、TIPが大きすぎてコンパイルできないと思われる場合は、次のように試してみてください:

DEFINE TRANSACTION rhtABC calls(menu_A)   tpname(RHTA); 
DEFINE TRANSACTION rhtB   calls(query_B)  tpname(RHTA); 
DEFINE TRANSACTION rhtCU  calls(update_C) tpname(RHTA); 
DEFINE TRANSACTION rhtCS  calls(select_C) tpname(RHTA); 

TIP rhtABCには3つの機能が削除されているため、コンパイルがよりコンパクトになりました。 TIP rhtBには1つの機能があり、対応するホスト機能が1つのRHTに残っていても、TIP rhtCは2つのTIPに分割されています。

クライアント・アプリケーションは、以下のようにこれらの関数を呼び出します:

rc := rhtB.rhtB_init(tranuse); 
rc := rhtABC.pick(tranuse, choice); 
rc := rhtB.query(tranuse, input); 
rc := rhtCU.update(tranuse, record); 
rc := rhtCS.select(tranuse, record); 
rc := rhtABC.rhtABC_term(tranuse); 

すべてのTIPにinit関数とterm関数が含まれており、DEFINE TRANSACTION 文がすべて同じtpname(RHTA)を指定しているため、同じリモート・ホスト・トランザクションが常に初期化のために呼び出されるため、初期化には別のTIPが使用されます。

APPC会話の共有の上書きと診断

TIPのデフォルトのオーバーライド・パラメータは、初期化を実行するために呼び出されたTIPのinit関数で処理されます。 APPC会話が確立されると、優先パラメータの更なる共有は必要ありません。 上書きをTIP init関数に渡すだけで何もする必要はありません。

TIP診断パラメータは、所定の会話を共有するすべてのTIP間で共有されます。 実際に、初期化を実行しているTIPの診断をリクエストすると、会話を共有しているすべてのTIPに対して同じ診断がリクエストされます。 会話を共有している複数のTIPから診断をリクエストすることはできません。 アプリケーション・デザイナまたはユーザーは、TIPランタイム・トレース・コントロールをTIP init関数に渡すだけで済みます。

マルチバイト文字セット・サポートによるアプリケーション開発

COBOLは現在、 PIC Gデータ型のダブル・バイト文字セット(DBCS)のみをサポートしています。

PGAUは、COBOLII PIC Gデータ型をPL/SQL VARCHAR2変数として処理し、リモート・ホスト・データおよびローカルOracleデータ用に指定されたOracle NLS_LANGUAGEに従ってデータを自動的に変換するTIPを生成します。

これらのOracle NLS_LANGUAGEは、リモート・トランザクションを使用してTIPによって交換されるすべてのPIC G データのデフォルトとして指定できます(DEFINE TRANSACTION ... REMOTE_MBCSまたはLOCAL_MBCSを参照)。 任意の個々のPIC Gデータ・アイテムのOracle NLS_LANGUAGEをさらにオーバーライドすることができます(REDEFINE DATA ... REMOTEまたはLOCAL_LANGUAGEを参照)。

DBCSデータは、サポートされているDBCS文字セットの任意の組み合わせでエンコードできます。 たとえば、レコード内の各データ・フィールドに異なるコードページを許可するリモート・ホスト・アプリケーションは、Oracle Database Gateway MBCSサポートでサポートされています。

PIC XアイテムでのREDEFINE DATA ... REMOTE_LANGUAGEまたはLOCAL_LANGUAGEの使用もサポートされています。 したがって、TIPは、指定されたPIC Xデータ・フィールドに対して、残りのPIC Xデータ・フィールドに対してデフォルトでSBCS変換に加えて、DBCSまたはMBCS変換を実行できます。 デフォルトのSBCS変換は、DEFINE TRANSACTION... NLS_LANGUAGEおよびローカルOracleのデフォルトLANGUAGE環境値に従います。

PGAUがTIPを生成すると、PIC Gデータ型はPL/SQL VARCHAR2データ型に変換されます。 TIPによる変換後、受信した'PIC G' VARCHAR2データ型は、シフト・アウトおよびシフト・イン・メタ文字の削除により最大長以下の長さを持つことができ、送信された'PIC G' RAWは、必要に応じてシフト・アウトおよびシフト・イン文字を挿入します。リモート・ホストの文字セットが指定されています。

これは、常に既知の固定長であるPIC Xデータに対して実行される変換とは異なります。したがって、PIC Xデータ・フィールドのTIPでCHARデータ型が使用されます。 ただし、PIC XフィールドにDBCSまたはMBCSデータが含まれている場合でも、必要に応じてCHAR変数が使用され、空白が埋められます。

一部のリモート・ホスト・アプリケーションは、 PIC GフィールドをPIC Xバイトで囲み、シフト・アウト、メタ文字のシフト・インに使用されます。 そのようなCOBOL定義は次のようになります:

01 MY_RECORD. 
   05 SO PIC X. 
   05 MY_SBCS_DATA PIC G(52). 
   05 SI PIC X. 

3つのフィールドはすべて、変換が実行されるときに別々のデータ・アイテムとして定義され、処理されるため、これはPGAUによって正しく処理されません。

適切に処理されるためには、PGAUへの定義入力は次のようにする必要があります:

01 MY_RECORD. 
   05 MY_MBCS_DATA PIC G(51).

PGAUのREDEFINE DATA文は、フィールドSOおよびSIUSAGE(SKIP)を指定し、MY_MBCS_DATAを再定義するために'05 MY_MBCS_DATA PIC G(51).'に指定することによって、3フィールド定義を1フィールド定義に再定義できます。 3つのREDEFINE文をPGAU入力制御ファイルに入れることができるため、リモート・ホスト定義を変更する必要はありません。

APPCを使用するための端末指向トランザクションの変更

リモート・トランザクション・プログラムには、APPC会話を開始、通信、および終了するためにマップされたAPPC verbが含まれている必要があります。 ただし、リモート・トランザクション・プログラムが端末指向の場合は、次のオプションを使用できます:

  • 端末ロジックをアプリケーションとI/Oロジックから分離することができます。 この分離が達成されると、ゲートウェイ・コールとトランザクション・アプリケーション・ロジックとの間のインタフェースに小さなフロントエンド・リモート・トランザクション・プログラムを書き込むことができます。 たとえば、CICSでは、CICS LINKを使用してこの手法を実装します。

  • 既存のプログラムを変更して、APPC呼び出しが組み込まれるようにすることができます。 この例では、PGADB2Iを使用して、次のようにCICSとその関連マップAPPC verbを使用します:

    • EXEC CICS ASSIGNは、ゲートウェイによって開始された会話を受け入れます。

    • EXEC CICS RECEIVEが引数を受け取ります。

    • EXEC CICS SENDは結果を終了します。

    • EXEC CICS RETURNは会話を終了します。

  • 端末指向のトランザクションを変更しない場合は、端末指向プログラムとゲートウェイの間に、IBM CorporationのCICS Transaction Server for z/OSなどのAPPC対応インタフェースを挿入できます。

  • IMS/TMでは、既存の変更されていないIMSトランザクションに暗黙のAPPC機能を使用してゲートウェイを使用してアクセスできます。 暗黙のAPPCを使用すると、I/O PCBを使用する標準DLI GU、GN、およびISRT呼び出しは、IMSトランザクションがAPPCを介して呼び出されるときに、適切なAPPC送信または受信呼び出しに自動的に変換されます。

TIPを使用するために必要な特権

実行権限は、TIPまたは手続きの呼び出し元に明示的に付与されなければなりません。 この権限は、ロールを介しては付与できません。

TIPをトレースしたいTIPユーザーは、rtraceおよびptraceプロシージャに対する実行特権を与える必要があります。 詳細については、インストール・ガイドの通信プロトコルに適した章のPGAUの構成を参照してください。

たとえば、Microsoft Windowsでは次のように指定します。

C:\> sqlplus pgaadmin\pw@database_specification_string 
SQL> grant execute on pgaadmin.purge_trace to tip_user_userid;
SQL> grant execute on pgaadmin.read_trace to tip_user_userid; 

UNIXベースのシステムの場合:

$ sqlplus pgaadmin/pw@database_specification_string 
SQL> grant execute on pgaadmin.purge_trace to tip_user_userid;
SQL> grant execute on pgaadmin.read_trace to tip_user_userid; 

TIPが開発された後、TIPユーザーはTIP所有者によってTIPに対する実行特権を与えられなければなりません。 TIP所有者は通常PGAADMINですが、PGDDDEFまたはPGDDGENのロールを付与された別のユーザーになることもできます。

たとえば、Microsoft Windowsでは次のように指定します。

C:\> sqlplus tip_owner\pw@database_specification_string 
SQL> grant execute on tipname to tip_user_userid;

UNIXベースのシステムの場合:

$ sqlplus tip_owner/pw@database_specification_string 
SQL> grant execute on tipname to tip_user_userid;

ここで、UTL_PGは、ゲートウェイUTL_RAWおよびUTL_PGコンポーネントがインストールされたOracleデータベースのUTL_PG UTL_PG識別子です。 これは、TIPが実行されるOracleデータベースと、TIP所有者のユーザーIDからTIPの付与が実行される場所と同じです。

これらの許可を実行するSQLスクリプトは、Microsoft Windowsの場合%ORACLE_HOME%\dg4appc\adminディレクトリおよびUNIXベース・システム場合$ORACLE_HOME/dg4appc/adminディレクトリにあります。 pgddausr.sqlスクリプトは、単一のTIPユーザーによるパッケージへのプライベート・アクセスの許可を実行します。 プライベート許可が使用される場合、pgddausr.sqlスクリプトは各TIPユーザーのユーザーIDに対して1回実行する必要があります。

これらのスクリプトを実行するには、SQL*Plusを使用して、ユーザーPGAADMINとしてOracleデータベースに接続します。 SQL*Plusから、pgddausr.sqlスクリプトを、UNIXベースのシステムのMicrosoft Windowsディレクトリまたは$ORACLE_HOME/dg4appc/adminディレクトリの%ORACLE_HOME%\dg4appc\adminディレクトリから実行します。 スクリプトは、前述のように必要な許可を実行します。 必要なユーザーID、パスワードおよびデータベース指定文字列の入力を求められます。 プライベート許可を使用している場合は、パッケージへのアクセスを必要とするユーザーIDごとにこのステップを繰り返します。

パブリック許可を実行するためのスクリプトは提供されていません。 これを行うには、次のコマンドを発行します:

Microsoft Windowsの場合:

C:\> sqlplus tip_owner\pw@database_specification_string 
SQL> grant execute on tipname to PUBLIC;  

UNIXベース・システムの場合:

$ sqlplus tip_owner/pw@database_specification_string 
SQL> grant execute on tipname to PUBLIC;