DDステートメントの連結(コンカチネーション)とは、複数のデータセットを1つのファイルとして定義することで、MVSのJCLにおける大きな特長の1つです。連結されたデータセットは読み込み専用になりますが、複数のデータセットに分かれて格納されているデータ・レコードをまとめて処理するような場合に便利な機能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//STEP1 EXEC PGM=USRPROG1 //REPORT DD SYSOUT=* //OUTFILE DD DISP=OLD,DSN=UAP6.OUTDATA1 //INFILE DD DISP=OLD,DSN=UAP5.JAN2011.MASTER ┐ // DD DISP=OLD,DSN=UAP5.FEB2011.MASTER │ // DD DISP=OLD,DSN=UAP5.MAR2011.MASTER │ // DD DISP=OLD,DSN=UAP5.APR2011.MASTER │ // DD DISP=OLD,DSN=UAP5.MAY2011.MASTER │ // DD DISP=OLD,DSN=UAP5.JUN2011.MASTER ├ ここが連結データセット // DD DISP=OLD,DSN=UAP5.JUL2011.MASTER │ // DD DISP=OLD,DSN=UAP5.AUG2011.MASTER │ // DD DISP=OLD,DSN=UAP5.SEP2011.MASTER │ // DD DISP=OLD,DSN=UAP5.OCT2011.MASTER │ // DD DISP=OLD,DSN=UAP5.NOV2011.MASTER │ // DD DISP=OLD,DSN=UAP5.DEC2011.MASTER ┘ // |
アプリケーション・プログラムなどの処理では、複数の順次データセットを連結して処理することがよくあります。上記の例では、プログラムは12個のデータセットを1つのINFILEとしてアクセスします。月別のデータファイルを1年分まとめて処理するような場合、事前にデータセットをマージしておく必要がありません。
1 2 3 4 5 6 |
//STEP1 EXEC PGM=USRPROG2 //STEPLIB DD DISP=SHR,DSN=UAP5.LOADLIB ┐ // DD DISP=SHR,DSN=UAP5.COMMON.LLIB ├ ここが連結データセット // DD DISP=SHR,DSN=UAP7.LOADLIB ┘ //PRINTOUT DD SYSOUT=* // : |
区分データセット(PDSE含む)も連結できます。最も多いのがプログラムで使用するロードモジュールが格納されたライブラリーの定義です。共通で使用するサブルーチンなどが別のデータセットにある場合、メインのプログラムが格納されたライブラリーと連結してSTEPLIBとして定義します。メンバーは連結定義の先頭データセットから探索されます。同名のメンバーが存在する場合、連結の先頭に近い場所に定義したデータセットから読み込まれます。
MVSではファイルとデータセットは似ているようで違います。ファイルはプログラムから見たデータレコードの集まりで論理的なデータの集合体を指し、データセットはディスクやテープに記録されている実体としてのデータレコードの集まりで物理的に格納されたデータです。両者の違いはJCLでDDステートメントを連結するとわかりやすいです。最初の例では、プログラムからはINFILEという1つのデータレコードの集まりに見えますが、実体は12の別々のデータセットとして分かれて格納されています。