使用 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 程式

下面是一個 JCL 示例,其中程式 MYPROG 使用輸入檔案 MYDATA.URMI.INPUT 執行,並生成兩個寫入卷軸的輸出檔案。

//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 語句將一個完整記錄(即 CUST1 1000)讀入程式中定義的工作儲存變數。

執行 COBOL-DB2 程式

為了執行 COBOL DB2 程式,JCL 和程式中使用了專門的 IBM 實用程式;DB2 區域和所需引數作為輸入傳遞給實用程式。

執行 COBOL-DB2 程式時,遵循以下步驟

  • 編譯 COBOL-DB2 程式時,除了載入模組外,還會建立一個 DBRM(資料庫請求模組)。DBRM 包含 COBOL 程式的 SQL 語句,並對其語法進行了檢查以確保其正確性。

  • DBRM 繫結到 COBOL 將執行的 DB2 區域(環境)。這可以透過 JCL 中的 IKJEFT01 實用程式來完成。

  • 繫結步驟完成後,使用 IKJEFT01(再次)執行 COBOL-DB2 程式,並將載入庫和 DBRM 庫作為輸入傳遞給 JCL。

//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 中指定。

廣告