เรียกใช้โปรแกรม COBOL โดยใช้ JCL

การรวบรวมโปรแกรม COBOL

ในการดำเนินการโปรแกรม COBOL ในโหมดแบตช์โดยใช้ JCL โปรแกรมจะต้องมีการคอมไพล์และสร้างโมดูลโหลดด้วยโปรแกรมย่อยทั้งหมด JCL ใช้โมดูลโหลดไม่ใช่โปรแกรมจริงในขณะดำเนินการ ไลบรารีโหลดจะเชื่อมต่อกันและมอบให้กับ JCL ในขณะดำเนินการโดยใช้JCLLIB หรือ STEPLIB.

มียูทิลิตี้คอมไพเลอร์เมนเฟรมจำนวนมากสำหรับคอมไพล์โปรแกรม 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 ข้างต้นสามารถใช้กับโมดูล COBOL ที่ไม่ใช่ DB2 เท่านั้น

การส่งผ่านข้อมูลไปยังโปรแกรม COBOL

การป้อนข้อมูลไปยังโปรแกรมชุด COBOL สามารถผ่านไฟล์พารามิเตอร์ PARAM และคำสั่ง SYSIN DD ในตัวอย่างด้านบน:

  • บันทึกข้อมูลจะส่งผ่านไปยัง MYPROG ผ่านไฟล์ MYDATA.URMI.INPUT ไฟล์นี้จะถูกอ้างอิงในโปรแกรมโดยใช้ชื่อ DD INPUT1 ไฟล์สามารถเปิดอ่านและปิดได้ในโปรแกรม

  • ข้อมูลพารามิเตอร์ PARM ACCT5000 ได้รับในส่วน LINKAGE ของโปรแกรม MYPROG ในตัวแปรที่กำหนดภายในส่วนนั้น

  • ข้อมูลในคำสั่ง SYSIN ได้รับผ่านคำสั่ง ACCEPT ในส่วน PROCEDURE ของโปรแกรม ทุกคำสั่ง ACCEPT จะอ่านหนึ่งระเบียนทั้งหมด (เช่น CUST1 1000) ในตัวแปรหน่วยเก็บข้อมูลที่ทำงานซึ่งกำหนดไว้ในโปรแกรม

การรันโปรแกรม COBOL-DB2

สำหรับการรันโปรแกรม COBOL DB2 ยูทิลิตี้ IBM เฉพาะจะถูกใช้ใน JCL และโปรแกรม ภูมิภาค DB2 และพารามิเตอร์ที่ต้องการจะถูกส่งผ่านไปยังยูทิลิตี้

ทำตามขั้นตอนด้านล่างนี้ในการรันโปรแกรม COBOL-DB2:

  • เมื่อคอมไพล์โปรแกรม COBOL-DB2 DBRM (Database Request Module) จะถูกสร้างขึ้นพร้อมกับโหลดโมดูล DBRM ประกอบด้วยคำสั่ง SQL ของโปรแกรม COBOL โดยตรวจสอบไวยากรณ์แล้วว่าถูกต้อง

  • DBRM ถูกผูกไว้กับภูมิภาค DB2 (สภาพแวดล้อม) ที่ COBOL จะทำงาน สามารถทำได้โดยใช้ยูทิลิตี้ IKJEFT01 ใน JCL

  • หลังจากขั้นตอนการโยงโปรแกรม COBOL-DB2 จะรันโดยใช้ IKJEFT01 (อีกครั้ง) โดยมีโหลดไลบรารีและไลบรารี 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 คือโปรแกรม COBOL-DB2 ที่รันโดยใช้ IKJEFT01 โปรดทราบว่าชื่อโปรแกรม DB2 Sub-System Id (SSID) ชื่อแผน DB2 จะถูกส่งผ่านภายในคำสั่ง SYSTSIN DD ไลบรารี DBRM ถูกระบุใน STEPLIB