10.2 DDステートメントの定義情報を得る(DEVTYPEとRDJFCB)

プログラムを実行するには、JCLを作成して使用するデータセットに対応したDDステートメントを定義します。DDステートメントにどのようなパラメーターが定義されているかによって、プログラムの動きを変えたりアクセスするデータセットの情報を得たりすることはしばしば行われます。
アプリケーションの実行結果のサマリー出力などにDD名だけではなくDSNを表示することで、利用者はプログラムが実際にどのデータセットにアクセスしたのかが容易にわかります。

データセットの装置タイプを得たり、DDステートメントが定義されているかを確認する

DEVTYPEマクロを発行することでDDステートメントに定義したデータセットの装置タイプを得ることができます。DEVTYPEを利用すれば、特定の装置タイプしかサポートしないプログラムはOPEN前に定義されたデバイス種別を知ることができます。また、指定した名前に対応するDDステートメントが定義されていなければDEVTYPEはエラーを返すので、未定義のDDステートメントに対応したデータセットをOPENしないようにすることができます。未定義のDD名でOPENしてもエラーが返るだけですが、次のメッセージがコンソールに出てしまいます。DEVTYPEで事前に確認すればエラー・メッセージが発行されることを抑止できます。
IEC130I ddname DD STATEMENT MISSING
※サンプルではエラーを0か0以外かで判定してますが、実際のエラーコードは細分化されています(マニュアルを参照)。

DEVTYPEが返す情報はマクロのパラメーターによって変わります。サンプルは最もシンプルなパターンです。DEVINFOエリアには8バイトの情報が返り、先頭の4バイトはUCBの装置タイプバイト(UCBTBYT1~UCBTBYT4)です(IEFUCBOBマッピング・マクロで参照可能)。その他、DEVTYPEの詳細は「z/OS DFSMSdfp 拡張サービス」(z/OS)「システムプログラミング手引書 データ管理編」(MSP)「システムプログラマの手引-マクロ編-」(VOS3)の各マニュアルに記載されています。

DDステートメントに定義したパラメーター情報を得る

MVS(特にバッチプログラム)では、データセットはDD名によってアクセスするのが基本です。プログラムはデータセットの名前などを知る必要はありません(知らなくてもアクセスできる)。しかし、どのようなデータセットにアクセスするのかを求めたい場合もあり、そのような場合はRDJFCBマクロを利用できます。上記サンプルは、アクセスするデータセットのDSNと先頭のVOLUME名を求めるものです。
DDステートメントに定義されたパラメーターは、JFCBと呼ばれるコントロール・ブロックに格納されています。JFCBは、基本的にDDステートメントに定義されたパラメーターに基づき設定されているので、スペース情報(1次量、2次量他)などは指定がなければ設定されていません(それらはJFCBではなくDSCBを求めて得ることができる)。ただし、カタログされているボリューム名や一時的データセットのDSNなどは設定されています。DDステートメントのパラメーターをいろいろと変えて試してみるといいでしょう。なお、RDJFCBはOPENの前と後のどちらでも発行できます。OPEN後に発行した場合、RECFMなど1部のDCB情報はJFCBにも設定されます。読み込んだJFCBは、IEFJFCBNマッピング・マクロで参照できます。RDJFCBマクロもDEVTYPEと同じマニュアルに記載されています。