Jcl-run-cobol-programs

提供:Dev Guides
移動先:案内検索

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で指定されます。