コンカチネーション(連結DD文)
DDステートメントの連結(コンカチネーション)
DDステートメントの連結(コンカチネーション)とは、複数のデータセットを1つのファイルとして定義することで、MVSのJCLにおける大きな特長の1つです。連結されたデータセットは読み込み専用になりますが、複数のデータセットに分かれて格納されているデータ・レコードをまとめて処理するような場合に便利な機能です。
//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年分まとめて処理するような場合、事前にデータセットをマージしておく必要がありません。
//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として定義します。メンバーは連結定義の先頭データセットから探索されます。同名のメンバーが存在する場合、よりDD名に近い場所に定義したデータセットから読み込まれます。
MVSではファイルとデータセットは似ているようで違います。ファイルはプログラムから見たデータレコードの集まりで論理的なデータの集合体を指し、データセットはディスクやテープに記録されている実体としてのデータレコードの集まりで物理的にデータが格納されています。両者の違いはJCLでDD文を連結するとよりわかりやすいです。最初の例ではプログラムからはINFILEという1つのデータレコードの集まりに見えますが、実体は12の別々のデータレコードの集まりに分かれているわけです。