JCL記載方法まとめ　【初心者編】1


###### 以下は、JCLもQiitaも初心者が記載する自分のメモ
##    はじめに

  __<font color="blue">　【JCL(Job Control Language) = ジョブ制御言語】</font>とは__
　　　　メインフレームという大型の汎用機にて使用される
　　　OSに[COBOL（コボル）](https://qiita.com/nano357/items/462a3ec523a3e624340b "(https://qiita.com/nano357/items/462a3ec523a3e624340b)")  やPL/I（ピーエルワン）などの
　　　プログラムの実行、そのプログラムが必要とする
　　　入出力の設定等指示する言語です。

 
##### このメモは、JCLの基本的な記載方法のまとめです。

## <font color="green">①基本的な文法</font>
#### サンプルJCL(基本的な文法)
      1･･･ //TESTJOB  JOB MSGCLASS=H
      2･･･ //STEP01   EXEC PGM=TESTPGM
      3･･･ //INPUT    DD DSN=TESTDATA,DISP=SHR
      4･･･ //SYSOUT   DD SYSOUT=*


(1) <font color="blue">IDフィールド</font>（1桁目～2桁目に記載）
基本的にはIDフィールドは「<font color="Magenta">__//__</font>」。


(2) <font color="blue">名前フィールド</font>（3桁目～11桁目に記載）
　以下で紹介するJCLのステートメントの名前等を記載する。
　サンプルでいうと
　　1･･･「<font color="Magenta">__TESTJOB__</font>（<font color="blueviolet">__ジョブの名前__</font>）」と 
　　2･･･「<font color="Magenta">__STEP01__</font>（<font color="blueviolet">__ステップ名__</font>）」の部分

(3) <font color="blue">命令フィールド</font>（名前フィールドの後に記載）
　ステートメントを記載する。
　サンプルでいうと
　　1･･･「<font color="Magenta">__JOB__</font>」と
　　2･･･「<font color="Magenta">__EXEC__</font>」の部分

(4) <font color="blue">パラメータフィールド</font>（命令フィールドの後に記載）
　ステートメントのパラメータを記載する。
　サンプルでいうと
　　1･･･「<font color="Magenta">__MSGCLASS__</font>=H」と
　　2･･･「<font color="Magenta">__PGM__</font>=TESTPGM」の部分


## <font color="green">②ジョブの定義（JOBステートメント）</font>
　JOBステートメントは、ジョブの定義を行う。
　<font color="blueviolet">__ジョブの名前__</font>や以下の、<font color="blueviolet">__アカウント情報__</font>・<font color="blue">__CLASS__</font>・<font color="blue">__MSGCLASS__</font>・<font color="blue">__MSGLEVEL__</font>・<font color="blue">__LINES__</font>・<font color="blue">__TYPRUN__</font>・<font color="blue">__NOTIFY__</font>　などを指定。

#### サンプルJCL(ジョブ名)
      //TESTJOB  JOB,MSGCLASS=H
・__TESTJOB__は<font color="blueviolet">__ジョブの名前__</font>
　  １．  1～8文字の英数字または各国用文字 (#@￥)など

#### サンプルJCL(アカウント情報)
      //TESTJOB1 JOB(ACCTINFO,SUBAINFO),PROGRAMMER,MSGCLASS=H
・<font color="blueviolet">__アカウント情報__</font>
　  １．  __(ACCTINFO,SUBAINFO)__  省略可能な業務識別情報（所属など）
 　 ２．  __PROGRAMMER__  省略可能なプログラマ名（作成者など）

#### サンプルJCL(CLASS)
      //TESTJOB2 JOB CLASS=A,MSGCLASS=H
・<font color="blue">__CLASS__</font>=<font color="Magenta">__class__</font>
　  １．  ジョブに実行ジョブクラスを割り当てる指定できます。
　  ２．  <font color="Magenta">__A__</font>～<font color="Magenta">__Z__</font>,<font color="Magenta">__0__</font>～<font color="Magenta">__9__</font>の一桁の文字で指定（Z/OS V2R1以降の場合 2～8文字のクラス、ジョブ、グループ名で指定が可能）

 　 ※ジョブクラスは、ジョブの用途などで決められている。

#### サンプルJCL(MSGCLASS)
      //TESTJOB3 JOB CLASS=A,MSGCLASS=H
・<font color="blue">__MSGCLASS__</font>=<font color="Magenta">__class__</font>
　  １．  ジョブログの出力クラスを指定できます。
 　 ２．  <font color="Magenta">__A__</font>～<font color="Magenta">__Z__</font>,<font color="Magenta">__0__</font>～<font color="Magenta">__9__</font>の一桁の文字で指定

 　 ※ジョブログ(JCLステートメント、割り振りメッセージ、終了メッセージ)
 　 ※終了メッセージ　ジョブの終了時に行われるデータセットの後始末処理について知らせるために出力
　　例「
　　　IEF237IALLOC.FOR JCL001 ASM STEP01
　　　　　・
　　　　　・
　　　IEF237I JCL001 ASM STEP01 -STEP WAS EXECTED - COND CODE 0000
　　　」

 　 ※割り振りﾒｯｾｰｼﾞ　OSがジョブの制御のために確保したデータセット資源をユーザに知らせるために出力
　　例「
　　　IEF237I SYS1.MACLIB				KEEP
　　　IEF237I VOL SER = MVSRES
　　　　　・
　　　　　・
　　　IEF285I JES2.JOB00721.S00102			SYSOUT
　　　」

#### サンプルJCL(MSGLEVEL)
      //TESTJOB4 JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1)
・<font color="blue">__MSGLEVEL__</font>=(<font color="Magenta">__0__</font>～<font color="Magenta">__2__</font>,<font color="Magenta">__0__</font>～<font color="Magenta">__1__</font>)
　  １．  ジョブログに出力される内容を指定する。
　  ２．  一つ目は0～2の一桁の文字で、入力JCLの印刷範囲を指定
　　　      <font color="Magenta">__0__</font>：JCL中のJOBステートメントのみ出力
　　　      <font color="Magenta">__1__</font>：すべてのJOBステートメントを出力
　　　      <font color="Magenta">__2__</font>：入力JCL中に記述されたステートメントのみ出力
　  ３．  二つ目は0～1の一桁の文字で、割り振り状況の出力有無
　　　      <font color="Magenta">__0__</font>：異常終了時のみメッセージを出力
　　　      <font color="Magenta">__1__</font>：正常終了時もメッセージを出力

#### サンプルJCL(LINES)
      //TESTJOB5 JOB CLASS=A,MSGCLASS=H,LINES=(10,CANCEL)
・<font color="blue">__LINES__</font>=(<font color="Magenta">__nnnnnn__</font>,<font color="blueviolet">__CANCEL__</font>)
　  １．    SYSOUTデータセットの<font color="Magenta">__最大値__</font>を、千行単位で指定します。
　  ２．    <font color="blueviolet">__CANCEL__</font>オプションを指定すると、ジョブの実行を打ち切る。
　  ３．    上記の場合は、一万行を超えると、ジョブは異常終了する

#### サンプルJCL(TYPRUN)
      //TESTJOB6 JOB CLASS=A,MSGCLASS=H,TYPRUN=HOLD
・<font color="blue">__TYPRUN__</font>=<font color="Magenta">__HOLD__</font> or <font color="Magenta">__SCAN__</font> or <font color="Magenta">__COPY__</font> or <font color="Magenta">__JCLHOLD__</font>
  ジョブの特殊処理を指定する。
　  １．  <font color="Magenta">__HOLD__</font>（保留）　オペレータがジョブを解放するまで、そのジョブは実行されないで待ち行列に保留されるように指示。
　  ２．  <font color="Magenta">__SCAN__</font>　構文の誤りを見つけるためにJCLステートメントを操作するだけで実行はしないことを指示。
　  ３．  <font color="Magenta">__COPY__</font>(JES2のみ)　入力ジョブストリームを SYSOUT データセットにコピーする。
　  ４．  <font color="Magenta">__JCLHOLD__</font>(JES2のみ)　構文の誤りを見つけるためにJCLステートメントを操作するだけで実行はしないことを指示。保留が解かれたら構文チェックするため、サブミット時点のプロシージャの内容で実行されるとは限らない。

  　※ジョブストリーム　実行される一連のジョブと、処理順序を決める時刻、優先順位、その他の依存関係のことです。

  　※SYSOUTデータセット（プログラムの実行結果などを格納する特別なスプール内のデータ）
 　 詳細は参考文献：サイト様の「[SYSOUTデータセットとは](http://arteceed.info/?p=541 "(http://arteceed.info/?p=541)「メインフレーム・コンピューター」で遊ぼう")」を参照。

#### サンプルJCL(PRTY)
      //PRESRPT OUTPUT PRTY=200,FORMS=TOPSEC
・<font color="blue">__PRTY__</font>=<font color="Magenta">__nnn__</font>　　　（nnn 優先順位）
　  １．  ジョブクラス内での選択優先順位を指定する
　  ２．  初期の優先順位を指定します。nnn は、<font color="Magenta">__0__</font> から <font color="Magenta">__255__</font> までの 10 進数です。
　　　　0 が最も低い優先順位で、255 が最高です。

　　　 この例では、JES は、社長の報告書 (PRESRPT) のコピーを 1 つ、TOPSEC という
　　　名前の用紙に印刷します。優先順位を 200 と指定したので、報告書はおそらく出力
　　　キューに入ると即座に印刷されます。


#### サンプルJCL(NOTIFY)
      //TESTJOB7 JOB CLASS=A,MSGCLASS=H,NOTIFY=USERNAME
・<font color="blue">__NOTIFY__</font>=<font color="Magenta">__user__</font>　　（userはログオンID）
  ジョブの完了時に、完了メッセージをユーザのTSO端末に送るように指示します。
  <font color="Magenta">__user__</font>の部分に<font color="blueviolet">__&SYSUID__</font>を指定し、SUBMITするとそのJOBの実行ユーザにメッセージが送られる
 　 ※サブミット（JCLをリーダINTRDR：Internal reader = 内部読み取りプログラムへ投入することでジョブがスケジュールされる）
 　 詳細は参考文献：サイト様の「[INTRDR](http://arteceed.info/?p=685 "(http://arteceed.info/?p=685)「メインフレーム・コンピューター」で遊ぼう")」を参照。
 　 

 　 ※TSO端末（Time Sharing Option）IBMによるMVS（OS）対応の主要開発環境マネージャ。
 　 詳細は参考文献：サイト様の「[11.TSOとISPF](http://arteceed.info/?p=169 "(http://arteceed.info/?p=169)「メインフレーム・コンピューター」で遊ぼう")」を参照。 　 

## <font color="green">③ステップの定義（EXECステートメント）</font>
　ジョブステップの始まりを示します。（またはプロシージャー内の各ステップ）
　一つのJOBに対して複数のEXECステートメントを記述することができます。
　EXECステートメントは、ジョブステップの定義を行う。
　<font color="blueviolet">__ステップ名__</font>や以下の、<font color="blue">__PGM__</font>・<font color="blue">__PROC__</font>・・・・・・・などを指定。

 　 ※プロシージャは、処理の単位（ある特定の処理を行うための一連の命令）
 　 ※ストリーム内プロシージャ（同じジョブ内で繰り返し実行されるｽﾃｯﾌﾟを定義したもの）
 　 ※カタログ式プロシージャ（複数のジョブで共有されるプロシージャが独立したﾒﾝﾊﾞｰ）

#### サンプルJCL(ステップ名)
      //STEP02   EXEC PGM=PGMNAME
・<font color="blue">__STEP02__</font>  は  <font color="blueviolet">__ステップ名__</font>
　  １．  1～8文字の英数字または各国用文字 (#@￥)など

#### サンプルJCL(PGM)
      //STEP03   EXEC PGM=PGMNAME
・<font color="blue">__PGM__</font>=__PGMNAME__  は  プログラム名
　  １．  ステップで実行するプログラムのロードモジュール名を指定する。

#### サンプルJCL(PROC)
      //STEP04   EXEC PROC=IBMZC
・<font color="blue">__PROC__</font>=__IBMZC__  は  プロシージャ名
　  １．  ステップで実行するプロシージャー名を指定する。
#### サンプルJCL(JOBLIB)
      //TESTJOB8 JOB CLASS=A,MSGCLASS=H
      //JOBLIB   DD DISP=SHR,DSN=TESTDATA.ALOAD
      //STEP05   EXEC PGM=TESTPGM1
・<font color="blueviolet">__JOBLIB__</font>  は  ジョブ全体で使用するライブラリーを指定するDD
　  １．  定義する場所は、JOBステートメントの後　かつ　EXECステートメントの前に定義する。

#### サンプルJCL(STEPLIB)
      //TESTJOB8 JOB CLASS=A,MSGCLASS=H
      //JOBLIB   DD DISP=SHR,DSN=TESTDATA.ALOAD
      //STEP06   EXEC PGM=TESTPGM2
      //STEP07   EXEC PGM=TESTPGM3
      //STEPLIB  DD DISP=SHR,DSN=TESTDATA.SLOAD
・<font color="blueviolet">__STEPLIB__</font>  は  このステップだけで使用するライブラリーを指定するDD 
　  １．  定義する場所は、EXECステートメントの後に定義する。
　  ２．  JOBLIBとSTEPLIBが両方指定された場合は、STEPLIBだけが使用される。
　　　（上記の場合は
　　　　STEP06のPGM0002は、STEPLIBがないので、JOBLIBのTESTDATA.ALOAD
　　　　STEP07のPGM0003は、STEPLIBのTESTDATA.ALOAD　が参照される
　　　　）

#### サンプルJCL(JCLLIB)
      //TESTJOB9 JOB CLASS=A,MSGCLASS=H
      //         JCLLIB ORDER=(TESTDATA.1LIB,
                    TESTDATA.2LIB,TESTDATA.3LIB)
      //JOBLIB   DD DISP=SHR,DSN=TESTDATA.ALOAD
      //*
      //STEP08   EXEC PROC1
・<font color="blueviolet">__JCLLIB__</font> <font color="Magenta">__ORDER__</font>=(__TESTDATA.1LIB,TESTDATA.2LIB,TESTDATA.3LIB__)
　  １．  PROCパラメータで指定した、プロシージャがカタログ式プロシージャの場合、プロシージャメンバーが格納されているデータセットを定義
　  ２．  定義する場所は、JOBステートメントの後　かつ　EXECステートメントの前に定義する。

　　※//*　注釈ステートメント（出力リストにコメントを記述するために使用します）

#### サンプルJCL(PARM)
      //STEP09   EXEC PGM=TESTPGM,PARM=ABCDEFG
・<font color="blue">__PARM__</font>=__ABCDEFG__
　  １．  PGMで指定したプログラムに渡す可変情報を指定（引数）

#### サンプルJCL(PARMMD)
      //STEP10   EXEC PGM=TESTPGM,PARMMD=PROGPARM
      //PROGPARM DD *
      AAA ～ BBB
      CCC ～ DDD
       ZZZ（100文字以上）
      /*
・<font color="blue">__PARMMD__</font>=__PROGPARM__
　  １．  パラメータ文字列が100文字を超える場合は、任意のDD名の順次データセットを組み合わせる（Z/OS V2R1以降の場合）

 　 ※/*　区切りステートメント（入力ストリーム内のデータの末尾または転送レコードの終わりを示すために使用します）

#### サンプルJCL(COND=(コード,演算子))
      //STEP11   EXEC PGM=TESTPGM,COND=(0,NE)
　  １．  ステップの実行をスキップする条件を指定
・<font color="blue">__COND__</font>=(<font color="blueviolet">__コード__</font>,<font color="Magenta">__演算子__</font>)
　  ２．  <font>__復帰コード__</font>（ジョブステップが終了したあとにＯＳによって戻される、実行結果）
　  ３．  <font color="Magenta">__演算子__</font>
　　<font color="Magenta">__EQ__</font> :<font color="blueviolet">__コード__</font>が、<font>__復帰コード__</font>に等しい（<font color="blueviolet">__コード__</font>＝<font>__復帰コード__</font>）
　　<font color="Magenta">__NE__</font> :<font color="blueviolet">__コード__</font>が、<font>__復帰コード__</font>に等しくない（<font color="blueviolet">__コード__</font>！
＝<font>__復帰コード__</font>）
　　<font color="Magenta">__GT__</font> :<font color="blueviolet">__コード__</font>が、<font>__復帰コード__</font>により大きい（<font color="blueviolet">__コード__</font>＞<font>__復帰コード__</font>）
　　<font color="Magenta">__GE__</font> :<font color="blueviolet">__コード__</font>が、<font>__復帰コード__</font>により大きい　または　等しい（<font color="blueviolet">__コード__</font>＞＝<font>__復帰コード__</font>）
　　<font color="Magenta">__LT__</font> :<font color="blueviolet">__コード__</font>が、<font>__復帰コード__</font>により小さい（<font color="blueviolet">__コード__</font>＜<font>__復帰コード__</font>）
　　<font color="Magenta">__LE__</font> :<font color="blueviolet">__コード__</font>が、<font>__復帰コード__</font>により小さい　または　等しい（<font color="blueviolet">__コード__</font>＜＝<font>__復帰コード__</font>）
  上記の場合は、先行ステップの<font>__復帰コード__</font>がゼロでない場合は、STEP11は実行されない。

#### サンプルJCL(COND=(コード,演算子,ステップ名))
      //STEP12   EXEC PGM=TESTPGM,COND=(4,LT,STEP22)


・<font color="blue">__COND__</font>=(<font color="blueviolet">__コード__</font>,<font color="Magenta">__演算子__</font>,__ステップ名__)

　  上記の場合は、<font color="blueviolet">__コード(4)__</font>がSTEP22の<font>__復帰コード__</font> 　より
　　　　　　　　　小さい場合は、STEP12は実行されない。
　　　　　　（ STEP22の<font>__復帰コード__</font> が 4なら
　　　　　　　　　　　　　　　　STEP12は実行される
　　　　　　　     STEP22の<font>__復帰コード__</font> が 5,6なら
　　　　　　　　　　　　　　　　STEP12は実行されない  ）



      //         IF STEP22.RC <= 4 THEN
      //STEP12   EXEC PGM=TESTPGM
      //         ENDIF
・<font color="blue">__IF/THEN/ELSE/ENDIF ステートメント構文__</font>
　  上記の場合は、STEP22の<font>__復帰コード__</font> が4以下の場合は、
　　　　　　　THEN～ENDIF間のｽﾃｯﾌﾟ（STEP12）を実行する。


#### サンプルJCL(COND 特殊なパラメータ)
      //STEP12   EXEC PGM=TESTPGM,COND=EVEN,PARM=0
　※特殊なパラメータ
・<font color="blue">__COND__</font>=<font color="Magenta">__EVEN__</font>・・・先行するステップが異常終了した場合でも、ジョブステップを実行する。
・<font color="blue">__COND__</font>=<font color="Magenta">__ONLY__</font>・・・先行するステップが異常終了した場合のみ、ジョブステップを実行する。

#### サンプルJCL(REGION)
      //STEP13   EXEC PGM=TESTPGM,REGION=120K
・<font color="blue">__REGION__</font>=値
　  １．  プログラムを実行するのに使用するメモリーを指定
　　　　　上記の場合は、120K バイトの領域を割り当てます。

#### サンプルJCL(MEMLIMIT)
      //STEP14   EXEC PGM=TESTPGM,MEMLIMIT=10000M
・<font color="blue">__MEMLIMIT__</font>=値
　  １．  このジョブステップは、2 GB を超える
　  　　　64ビット仮想ストレージの利用限度を指定する。
　　　　　上記の場合は10000M バイトと指定しています。（Z/OS V2R1以降の場合）

#### サンプルJCL(TIME)
      //STEP15   EXEC PGM=TESTPGM,TIME=(12,10)
・<font color="blue">__TIME__</font>=値
　  １．  ジョブがCPUを使用できる最大の時間を指定する。
　  ２．  上記の場合は 12分 10 秒であると指定しています。


　　　　　　次回：JCL記載方法まとめ　【初心者編】2
　　　https://qiita.com/nano357/items/39ae7edaf31bbe1b3619


## 参考文献

JCL関連情報サイト様
　　　https://arteceed.squares.net/
　　　http://yfuku.sakura.ne.jp/mvs/mvsindex.html
　　　http://superbassist.fc2web.com/hp2/study/jcl/jclb.html

MVS JCL 解説書 - IBM Documentation：正式な構文等は以下を参照
　　　https://www.ibm.com/docs/ja/zos/2.3.0?topic=SSLTBW_2.3.0/com.ibm.zos.v2r3.ieab600/toc.htm

原典：日本アイ・ビー・エム株式会社
      GC28-1757-00
      OS/390 MVS JCL Reference
      （一部改変）
      OS/VS2 MVS JCL
      （一部改変）