データ域を使用したデータの受け渡し

データ域とは、ジョブ内またはジョブ間のプログラム間で、変数値などのデータを渡すために使用される i5/OS オブジェクトのことです。 データ域は、あるプログラムまたはジョブで使用する前に、そのプログラムに対して宣言したり作成することができます。 データ域の作成方法や宣言方法の詳細については、「CL プログラミング」を参照してください。

ローカル・データ域の使用

ローカル・データ域を使用すると、ジョブ内のプログラムの相互間で任意の情報を渡すことができます。 この情報は、略式メッセージのようなフリー・フォームのデータにしたり、構造化またはフォーマット設定されたフィールドにしたりすることができます。

内部および外部浮動小数点データ項目は、ローカル・データ域を使用して渡すことができます。 DISPLAY ステートメントを使用してローカル・データ域に書き込まれた内部浮動小数点数は、外部浮動小数点数に変換されます。

システムは、各ジョブごとにローカル・データ域を自動的に作成します。 ローカル・データ域は、ILE COBOL プログラムの外部に 1024 バイトの域として定義されます。

ジョブが発行されると、発行するジョブのローカル・データ域が、発行されるジョブのローカル・データ域にコピーされます。 発行ジョブがない場合、ローカル・データ域はブランクに初期設定されます。

ILE COBOL プログラムは、ACCEPT および DISPLAY ステートメントによってジョブのローカル・データ域にアクセスすることができます。 その際には、環境名 LOCAL-DATA に対応する簡略名を使用します。

各ジョブごとにローカル・データ域が 1 つのみ対応しています。 複数のワークステーションが 1 つのジョブによって獲得されている場合でも、そのジョブのローカル・データ域は 1 つだけです。 各ワークステーションごとにローカル・データ域があるわけではありません

自分で作成したデータ域の使用

自分でデータ域を作成し、それを使用することによって、プログラム間でデータを渡すこともできます。 この情報は、略式メッセージのようなフリー・フォームのデータにしたり、構造化またはフォーマット設定されたフィールドにしたりすることができます。 その作成時には、ライブラリーとデータ域の名前を指定します。

ローカル・データ域の形式とは違い、それらのデータ域にアクセスするには、ACCEPT および DISPLAY ステートメントのデータ域形式を使用します。 FOR 句を使用すれば、データ域の名前を指定できます。 オプショナルとして、IN LIBRARY 句を指定して、データ域が存在する i5/OS ライブラリーを指定することもできます。 IN LIBRARY 句を指定しない場合、ライブラリーはデフォルトにより *LIBL になります。

作成したデータ域に DISPLAY ステートメントを使用してデータを書き込むと、 データがそのデータ域に書き込まれる前に、そのデータ域はシステムによって LEAR (Lock Exclusive Allow Read) ロックでロックされます。 データ域のロックがそれ以外であるなら、LEAR ロックは適用されず、データ域には書き込まれません。 WITH LOCK 句を指定することによって、表示操作の完了後にデータ域をロックしておくことができます。

ACCEPT ステートメントを使用して、作成したデータ域からデータを検索すると、 システムは、LSRD (Lock Shared for Read) ロックを適用して、 データ域の読み取り中にデータ域が変更されないようにします。 読み取りが完了すると、LSRD ロックが除去され、WITH LOCK 句が指定されている場合はデータ域が LEAR ロックでロックされます。

ACCEPT ステートメントと DISPLAY ステートメントのいずれにおいても、WITH LOCK 句が指定されていないなら、 そのステートメントより前の LEAR ロックは除去されます。

ILE COBOL では、COBOL 実行単位 (活動化グループ) が活動状態の場合、LEAR ロックは 1 つのデータ域に対して 1 つだけかけられます。 活動化グループの終了時に、ロックされているデータ域があるなら、そのロックは除去されます。

以下に示すような理由で ON EXCEPTION 条件が存在する場合があります。

内部および外部浮動小数点データ項目は、データ域を使用して渡すことができます。 DISPLAY ステートメントを使用してデータ域に書き込まれた内部浮動小数点数値は、外部浮動小数点に変換されます。

ILE COBOL では、10 進数 (*DEC)、文字 (*CHAR)、論理 (*LGL)、および DDM (*DDM) データ域がサポートされています。 データ域の種類には関係なく、情報はデータ域との間で左そろえでやり取りされます。 10 進数データ域または論理データ域の参照時に AT 位置を指定する場合には、1 でなければなりません。

10 進数データ域との間では、データはパック形式でやり取りされます。 指定した数の総桁数および 10 進数桁数に基づいて、10 進数データ域が作成されます。 10 進数データ域にアクセスする ILE COBOL プログラムで、これと同じ桁数を宣言する必要があります。 たとえば、以下のようになります。

プログラム初期設定パラメーター (PIP) データ域の使用

PIP データ域は、事前開始ジョブによって使用されます。 一般に、事前開始ジョブとは、ICF の下のリモート・システムからのジョブであり、 始動しておき、呼び出すまで作動可能状態にしておくジョブのことです。

事前開始ジョブを使用すると、 呼び出したプログラムがジョブの始動処理が行われる間に待機する必要がなくなります。 プログラムが実際に開始する前に、ジョブの始動処理が実行されています。 ジョブはすでに始動されているので、事前開始ジョブを使うことによって、 プログラムの始動要求が受け取られるとすぐにプログラムが始動されます。

ILE COBOL プログラムは、ACCEPT ステートメントによってジョブの PIP データ域にアクセスすることができます。 その際には、関数名 PIP-DATA に対応する簡略名を使用します。

PIP データ域は、2000 バイトの英数字項目で、呼び出し側プログラムから受け取ったパラメーターが入れられています。 このデータ域により、プログラム初期設定パラメーター (事前開始ジョブでないなら標準 COBOL パラメーターにより提供されるもの) が提供されます。

PIP データ域にアクセスするには、形式 5 の ACCEPT ステートメントを使います。 これは、ローカル・データ域から読み取るために形式 4 の ACCEPT ステートメントを使うのと同じ方法です。 ILE COBOL を使用して PIP データ域を更新することはできませんので、ご注意ください。 構文の詳細については、「WebSphere Development Studio: ILE COBOL 解説書」を参照してください。

事前開始ジョブおよび PIP データ域の詳細については、「CL プログラミング」を参照してください。