Jcl-run-cobol-programs
JCLを使用したCOBOLプログラムの実行
COBOLプログラムのコンパイル
JCLを使用してバッチモードでCOBOLプログラムを実行するには、プログラムをコンパイルする必要があり、すべてのサブプログラムでロードモジュールが作成されます。 JCLは、実行時に実際のプログラムではなく、ロードモジュールを使用します。 ロードライブラリは連結され、 JCLLIB または STEPLIB を使用して実行時にJCLに渡されます。
COBOLプログラムのコンパイルには、多くのメインフレームコンパイラユーティリティが利用できます。 一部の企業では、 Endevor などの変更管理ツールを使用しています。これは、プログラムのすべてのバージョンをコンパイルして保存します。 これは、プログラムに加えられた変更を追跡するのに役立ちます。
//COMPILE JOB ,CLASS=6,MSGCLASS=X,NOTIFY=&SYSUID
//*
//STEP1 EXEC IGYCRCTL,PARM=RMODE,DYNAM,SSRANGE
//SYSIN DD DSN=MYDATA.URMI.SOURCES(MYCOBB),DISP=SHR
//SYSLIB DD DSN=MYDATA.URMI.COPYBOOK(MYCOPY),DISP=SHR
//SYSLMOD DD DSN=MYDATA.URMI.LOAD(MYCOBB),DISP=SHR
//SYSPRINT DD SYSOUT=*
//*
IGYCRCTLは、IBM COBOLコンパイラユーティリティです。 コンパイラーのオプションは、PARMパラメーターを使用して渡されます。 上記の例では、RMODEは、プログラムで相対アドレス指定モードを使用するようコンパイラーに指示します。 COBOLプログラムはSYSINパラメーターを使用して渡され、コピーブックはSYSLIBのプログラムで使用されるライブラリーです。
このJCLは、実行JCLへの入力として使用される出力としてプログラムのロードモジュールを生成します。
COBOLプログラムの実行
プログラムMYPROGが入力ファイルMYDATA.URMI.INPUTを使用して実行され、スプールに書き込まれる2つの出力ファイルを生成するJCLの例の下。
//COBBSTEP JOB CLASS=6,NOTIFY=&SYSUID
//
//STEP10 EXEC PGM=MYPROG,PARM=ACCT5000
//STEPLIB DD DSN=MYDATA.URMI.LOADLIB,DISP=SHR
//INPUT1 DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1 DD SYSOUT=*
//OUT2 DD SYSOUT=*
//SYSIN DD *
//CUST1 1000
//CUST2 1001
/*
MYPROGのロードモジュールはMYDATA.URMI.LOADLIBにあります。 これは、上記のJCLが非DB2 COBOLモジュールにのみ使用できることに注意することが重要です。
COBOLプログラムへのデータの受け渡し
COBOLバッチプログラムへのデータ入力には、ファイル、PARAMパラメーター、およびSYSIN DDステートメントを使用できます。 上記の例では:
- データレコードは、MYDATA.URMI.INPUTファイルを介してMYPROGに渡されます。 このファイルは、プログラム内でDD名INPUT1を使用して参照されます。 ファイルは、プログラムで開いたり、読み取ったり、閉じたりできます。
- PARMパラメーターデータACCT5000は、そのセクション内で定義された変数のプログラムMYPROGのLINKAGEセクションで受信されます。
- SYSINステートメントのデータは、プログラムのPROCEDURE部門のACCEPTステートメントを介して受信されます。 すべてのACCEPTステートメントは、1つのレコード全体(つまり、CUST1 1000)をプログラムで定義された作業用ストレージ変数に読み込みます。
COBOL-DB2プログラムの実行
COBOL DB2プログラムを実行するには、JCLおよびプログラムで専用のIBMユーティリティが使用されます。 DB2領域および必須パラメーターは、ユーティリティーへの入力として渡されます。
COBOL-DB2プログラムを実行するには、次の手順に従います。
- COBOL-DB2プログラムがコンパイルされると、DBRM(データベース要求モジュール)がロードモジュールとともに作成されます。 DBRMには、COBOLプログラムのSQLステートメントが含まれており、構文が正しいことが確認されています。
- DBRMは、COBOLが実行されるDB2領域(環境)にバインドされます。 これは、JCLでIKJEFT01ユーティリティーを使用して実行できます。
- バインドステップの後、JCLへの入力としてロードライブラリとDBRMライブラリを使用してIKJEFT01(再度)を使用して、COBOL-DB2プログラムを実行します。
//STEP001 EXEC PGM=IKJEFT01
//*
//STEPLIB DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR
//*
//input files
//output files
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DISPLAY DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(SSID)
RUN PROGRAM(MYCOBB) PLAN(PLANNAME) PARM(parameters to cobol program) -
LIB('MYDATA.URMI.LOADLIB')
END
/*
上記の例では、MYCOBBはIKJEFT01を使用して実行されるCOBOL-DB2プログラムです。 プログラム名、DB2サブシステムID(SSID)、DB2プラン名はSYSTSIN DDステートメント内で渡されることに注意してください。 DBRMライブラリーはSTEPLIBで指定されます。