- 「メインフレーム・コンピューター」で遊ぼう - http://www.arteceed.net -

プロシージャー内のSYSINデータを記号パラメーターで変更する

z/OS V1R13からは、プロシージャー内に直接ストリーム内データセット(SYSINデータ)を定義できるようになっています。さらに、z/OS V2R1からは、ストリーム内データセット(SYSINデータ)内でも記号パラメーターによるデータの置換ができるようになっています。これらは、昔からみんなが「出来たらとても便利なのに…」という機能の代表的なものと言えます。
元々のMVSとJES2の組み合わせでは出来なかったことなので、現在でも、プロシージャー内であるが故にDD * としたい数行のデータを別メンバーとして登録したり、SYSINデータをプロシージャー内ではなく呼び出すJCL側で定義して、データの一部をエディターで変更してからサブミットしたり、といったことを行っているかも知れません。
しかし、新しくサポートされた(と言っても5年くらいは前ですが)これらの機能はJCLの作成や運用をとても便利にします。ぜひとも覚えて、実務に応用していただければ、と思います。


サンプルJCLとプロシージャー

    //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)を参照して下さい。

サンプルではストリーム内プロシージャーを使用していますが、カタログ式プロシージャーでも勿論使用することができます。