3.4.3 ファイルの連結処理
COBOL2002で作成したユーザアプリケーションおよびSORT EEと連携して,複数のファイルを論理的に連結した1つのファイルとして扱うことができる。
NAME属性が同一であるDD要素を連続して記述することで,該当する一連のファイルを連結する指定になる。この場合,バッチジョブ実行システムは,連結対象である一連のDD要素のDSN属性に指定されたパス情報を環境変数として設定してから,ジョブステップのプログラムを実行する。環境変数に設定されたパス情報に該当するファイルは,COBOLアプリケーションまたはSORT EEによって,自動的に論理的な1つのファイルとして解釈されて処理される。連結されたファイル1つにつき,最大255のDD要素を連続して記述できる。
ファイルの連結処理のためにバッチジョブ実行システムが設定する環境変数の名称は,先頭のDD要素にRENAME属性が指定されていなければ,先頭に"DDN_"または"CBL_"を付加したDD要素名となる。先頭のDD要素にRENAME属性が指定されていれば,そのRENAME属性の値となる。また,この環境変数の値には,先頭のDD要素に指定された名称の環境変数に,DD要素を記述した順序で,割り当てた各ファイルのパス名を区切り文字コロン":"で連結した文字列が設定される。例を次に示す。
-
ジョブ定義XMLファイルの指定例(COBOLアプリケーションと連携する場合)
<STEP NAME="MYSTEP"> <EXEC PGM="MYUAP" LANG="COBOL" /> <DD NAME="MYDATA" TYPE="FILE" DSN="/bjexuser/BJEX/IN/input1" DISP="SHR" /> <DD NAME="MYDATA" TYPE="FILE" DSN="/bjexuser/BJEX/IN/input2" DISP="SHR" /> </STEP>
-
上記の指定に対してバッチジョブ実行システムが設定する環境変数の内容
CBL_MYDATA=/bjexuser/BJEX/IN/input1:/bjexuser/BJEX/IN/input2
この例の場合,COBOLアプリケーションは,input1およびinput2ファイルをまとめて,論理的な1つのファイル「MYDATA」と解釈する。
-
ジョブ定義XMLファイルの指定例(SORT EEと連携する場合)
<STEP NAME="STEP01"> <EXEC PGM="*"> <![CDATA[! exec 1>&2 /opt/HIEXSORT/bin/exsort -p ${DDN_SYSIN} !]]> </EXEC> <DD NAME="SYSIN" TYPE="DATA"> <![CDATA[! -function sort : -inpfile file=%DDN_INFILE% : !]]> </DD> <DD NAME="INFILE" TYPE="FILE" DSN="/bjexuser/BJEX/IN/inpsamf1" DISP="SHR" /> <DD NAME="INFILE" TYPE="FILE" DSN="/bjexuser/BJEX/IN/inpsamf2" DISP="SHR" /> <DD NAME="OUTFILE" TYPE="FILE" DSN="/bjexuser/BJEX/OUT/outsamf" DISP="RNW,KEEP" /> </STEP>
-
上記の指定に対してバッチジョブ実行システムが設定する環境変数の内容
DDN_INFILE="/bjexuser/BJEX/IN/inpsamf1:/bjexuser/BJEX/IN/inpsamf2"
この例の場合,SORT EEの-inpfileパラメータのfileオペランドで指定した%DDN_INFILE%には,例で示した,2つのファイルパスをコロンで区切って連結した文字列が設定される。SORT EEは,それらファイルを論理的に連結された1つのファイルと解釈して入力データとする。
NAME属性が同じDD要素がSTEP要素内で連続していない場合は,エラーとなる。
ファイルの連結は,COBOLアプリケーションおよびSORT EEから利用できる。また,JOBLIB,STEPLIB DD要素に対して使用した場合,複数のパス情報をコロンで連結してPATH環境変数に設定できる。
連結したファイルをCOBOLアプリケーションから使用する方法の詳細については,COBOL2002のドキュメントもあわせて参照のこと。
また,JOBLIB,STEPLIB DD要素の詳細については,「3.3 プログラムのシステムへの登録と使用」を参照のこと。
DD要素のTYPE属性によって,ファイル連結可能であるかどうかが決められている。TYPE属性の値によるファイル連結可否の一覧を次の表に示す。ファイル連結できないTYPE属性を指定したDD要素を連結した場合は,警告メッセージを出力してジョブを続行する。
TYPE属性 |
ファイル種別 |
ファイル連結可否 |
---|---|---|
DATA |
SYSINデータ |
○ |
DUMMY |
ダミーファイル |
○ |
FILE |
恒久ファイル |
○ |
TEMP |
一時ファイル |
○ |
TEMPISAM |
一時ISAMファイル |
× |
GDG |
世代ファイル |
○ |
LIB |
プログラム検索ディレクトリ |
○ |
SYSOUT |
SYSOUTデータファイル |
× |
DIR |
ディレクトリ |
× |
PREST |
ジョブ間PRESTファイル |
× |
TEMPPREST |
ジョブステップ間PRESTファイル |
× |
- (凡例)
-
○:ファイル連結できる。
×:ファイル連結できない。
また,連結できるファイルの形式はCOBOL2002やSORT EEによって決まっているため,各プログラムのドキュメントを参照して,連結できるファイルの形式を確認する必要がある。
- 注意事項
-
-
ダミーファイルをファイルの連結処理の途中に指定した場合,VOS3ではその指定をファイルの連結指定の終了と見なし,後続のファイルを連結しない。しかし,バッチジョブ実行システムでは,その指定をファイルの連結指定の終了と見なさないで,後続のファイルを連結する。VOS3から移行したジョブ定義XMLファイルに上記の指定があり,VOS3と同じ動作としたい場合は,ダミーファイルより後ろのDD要素を削除すること。
-
ファイルの連結処理によって連結したファイルは,COBOLプログラムまたはSORT EEの出力先として指定できない。指定した場合,連結したファイルであっても先頭のファイルにだけ出力される。
-
- 指定例
-
- (例1)正しい指定方法の例
<STEP NAME="MYSTEP"> <EXEC PGM="MYPGM" LANG="COBOL" /> <DD NAME="MYDATA" TYPE="FILE" DSN="/bjexuser/BJEX/INPUT/input1" DISP="SHR" /> <DD NAME="MYDATA" TYPE="FILE" DSN="/bjexuser/BJEX/INPUT/input2" DISP="SHR" /> <DD NAME="MYDATA" TYPE="FILE" DSN="/bjexuser/BJEX/INPUT/input3" DISP="SHR" /> <DD NAME="MYDATA" TYPE="FILE" DSN="/bjexuser/BJEX/INPUT/input4" DISP="SHR" /> </STEP>
この指定例では,input1,input2,input3,およびinput4の4ファイルが,論理的に結合された単一のファイルとして,ファイル名「MYDATA」でCOBOLプログラムからアクセスできる。
- (例2)誤った指定方法の例
<STEP NAME="MYSTEP"> <EXEC PGM="MYPGM" LANG="COBOL" /> <DD NAME="MYDATA" TYPE="FILE" DSN="/bjexuser/BJEX/INPUT/input1" DISP="SHR" /> <DD NAME="MYDATA" TYPE="FILE" DSN="/bjexuser/BJEX/INPUT/input2" DISP="SHR" /> <DD NAME="MYDATA" TYPE="FILE" DSN="/bjexuser/BJEX/INPUT/input3" DISP="SHR" /> <DD NAME="NEWDATA" TYPE="FILE" DSN="/bjexuser/BJEX/INPUT/inputx" DISP="SHR" /> <DD NAME="MYDATA" TYPE="FILE" DSN="/bjexuser/BJEX/INPUT/input4" DISP="SHR" /> </STEP>
この指定例では,NAME属性値「MYDATA」を持つDD要素のうち,input3とinput4との間に,別のNAME属性値を持つDD要素が記述されている。そのため,NAME属性値「MYDATA」を持つDD要素の二重定義として扱われ,ジョブ定義XMLファイルの構文解析エラーとなる。