z/OS V1R13からは、プロシージャー内に直接ストリーム内データセット(SYSINデータ)を定義できるようになっています。さらに、z/OS V2R1からは、ストリーム内データセット(SYSINデータ)内でも記号パラメーターによるデータの置換ができるようになっています。これらは、昔からみんなが「出来たらとても便利なのに…」という機能の代表的なものと言えます。
元々のMVSとJES2の組み合わせではできなかったことなので、現在でも、プロシージャー内であるが故に、DD * で定義したい数行のデータを別メンバーとして登録したり、SYSINデータをプロシージャー内ではなく呼び出すJCL側で定義して、データの一部をエディターで変更してからサブミットしたり、といったことを行っているかも知れません。
しかし、新しくサポートされた(と言っても5年くらいは前ですが)これらの機能は、JCLの作成や運用をとても便利にします。ぜひとも覚えて、実務に応用していただければ、と思います。
サンプルJCLとプロシージャー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//jobname JOB (account),progname,CLASS=x,MSGCLASS=x,MSGLEVEL=(1,1) //* // EXPORT SYMLIST=* //********************************************************************* //VSAMUNLD PROC DS= //SCRATCH EXEC PGM=IEFBR14 //SYSUT2 DD DISP=(MOD,DELETE),DSN=&DS..UNLOAD, // UNIT=SYSDA,SPACE=(TRK,1) //UNLOAD EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSUT2 DD DISP=(,CATLG),DSN=&DS..UNLOAD, // UNIT=SYSDA,SPACE=(TRK,(10,10),RLSE), // RECFM=VB,LRECL=27994 //SYSIN DD *,SYMBOLS=JCLONLY REPRO OFILE(SYSUT2) IDS(&DS) // PEND //********************************************************************* //STEP1 EXEC VSAMUNLD,DS=TRU1.CUSTOMER //STEP2 EXEC VSAMUNLD,DS=TRU1.EMPLOYEE // |
プロシージャー化しているのは、AMSのREPROによるVSAMデータセットのアンロード処理です。プロシージャーVSAMUNLDの呼び出し時に、入力データセット名を記号パラメーター(JCLシンボル)&DSで渡しています。プロシージャー内では記号パラメーター&DSを、SYSUT2 DDステートメントのDSNパラメーターとSYSIN DD *で定義しているストリーム内データの中にあるIDS(&DS)の部分で使っています。ここの&DSの箇所も実際のDSNに置き換えることができます。
従来であれば、ストリーム内データの中で記号パラメーターを使っても、このサンプルであれば、ただの文字「&DS」としてしかユーティリティーには渡りませんでした。しかし、このサンプルのようにEXPORTステートメントとDD *ステートメントのSYMBOLSパラメーターを指定することで、&DSの部分が「TRU1.CUSTOMER」のように実際のDSNに置き換えることができるようになっています。
EXPORTステートメント
EXPORTステートメントは、JCL シンボルをジョブ・ステップのプログラムで使用できるようにします。SYMLISTパラメーターで、どのJCLシンボルをEXPORTするか指定します。SYMLIST=*は、全てのJCLシンボルをEXPORTすることを意味します。
SYMBOLSパラメーター
DD * ステートメントのSYMBOLSパラメーターは、JES2に対してストリーム内データ内のJCLシンボルの置換をするよう指示するものです。SYMBOLS=JCLONLYは、EXPORTステートメントによって使用可能にされたJCLシンボルを置換することを意味します。
EXPORTステートメント、DD * ステートメントの詳細は、マニュアル「z/OS MVS JCL解説書」(SA88-7091)を参照して下さい。
サンプルではストリーム内プロシージャーを使用していますが、カタログ式プロシージャーでも勿論使用することができます。