ãããããšã³ã¿ãŒãã©ã€ãºã»ã¡ã€ã³ãã¬ãŒã ã¯ãçŸä»£ã®éçºè ã®ã»ãšãã©ãæžããããšã®ãªãã坿¥ã«çµ¡ã¿åã£ã2ã€ã®èšèªã§åäœããŠããŸããCOBOLã¯ãããžãã¹ããžãã¯ãèšç®ããã¡ã€ã«åŠçãã¬ã³ãŒã倿ãèŠå¶å ±åãªã©ãå®è£ ããŸããJCLïŒãžã§ãå¶åŸ¡èšèªïŒã¯ããã®ããžãã¯ã®å®è¡ãçµ±æ¬ããã©ã®ããã°ã©ã ããã©ã®é åºã§ãã©ã®ãã¡ã€ã«ã䜿ã£ãŠãã©ã®ãããªæ¡ä»¶äžã§ãæåãŸãã¯å€±æããå Žåã«äœãèµ·ããããå®çŸ©ããŸããã©ã¡ãã®èšèªããããäžæ¹ã®èšèªãªãã§ã¯æãç«ã¡ãŸãããCOBOLããã°ã©ã ã¯ãå ¥åãã¡ã€ã«ãã©ãããæ¥ãã®ããåºåãã©ãã«è¡ãã®ããç¥ããŸããããJCLã¯æåã®ã¬ã³ãŒããèªã¿èŸŒãŸããåã«ããããã®çåã«çããŸãã
ã¡ã€ã³ãã¬ãŒã ã·ã¹ãã ã®ä¿å®ãç£æ»ããŸãã¯è¿ä»£åãè¡ãçµç¹ã«ãšã£ãŠãJCLãšCOBOLã®é¢ä¿ãçè§£ããããšã¯ãå¿ é ã®ç¥èã§ãããããã倿Žåã®åœ±é¿åæãç§»è¡åã®ããã¥ã¡ã³ãäœæãå°éå®¶ã®éè·åã®ç¥è移転ãªã©ããã¹ãŠã«ãããŠå¿ èŠäžå¯æ¬ ãªåææ¡ä»¶ãšãªããŸããå€éè«æ±åŠçãè¡ããžã§ããååæããšã®èŠå¶å ±åæžãäœæãããããåŠçãããã·ã¹ãã ããå¥ã®ã·ã¹ãã ã«ããŒã¿ãäŸçµŠããããã·ãŒãžã£ãªã©ããããã¯ãã¹ãŠJCLã§å®çŸ©ãããCOBOLã§å®è¡ãããäž¡æ¹ãæ±ã£ãçµéšã®ãããšã³ãžãã¢ã¯ããå°æ°ããããŸããã
JCL ãã COBOL ãžã®ãããã³ã° ããŒã«ãå¿ èŠã§ãã?
詳ããèŠã SMART TS XL!
詳现æ å ±JCLãšã¯äœã§ããïŒ
JCLã¯ãžã§ãå¶åŸ¡èšèªã®ç¥ã§ããIBMã¡ã€ã³ãã¬ãŒã ã·ã¹ãã ã§ããããžã§ããå®è¡ããããã«äœ¿çšãããã¹ã¯ãªããèšèªã§ããJCLèªäœã¯ããŒã¿ãåŠçããŸãããã©ã®ããã°ã©ã ãå®è¡ããããã©ã®ãã¡ã€ã«ãå©çšå¯èœã«ããããã©ã®ã¡ã¢ãªãšCPUãªãœãŒã¹ãå²ãåœãŠãããã¹ãããã倱æããå Žåã®åŠçââãåäžãžã§ãå ã®è€æ°ã®ã¹ããããã©ã®ãããªé åºã§å®è¡ããããªã©ãããã°ã©ã ã®å®è¡æ¹æ³ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«æç€ºããŸãã
ãã¹ãŠã®JCLãžã§ãã¯ã3ã€ã®åºæ¬çãªã¹ããŒãã¡ã³ãã¿ã€ãã§æ§æãããŠããŸãã
JOBã¹ããŒãã¡ã³ãã¯ãã·ã¹ãã ã«ãžã§ããèå¥ãããäŒèšãåªå é äœãããã³ã¹ã±ãžã¥ãŒãªã³ã°ã®ãã©ã¡ãŒã¿ãå®çŸ©ããŸãã
EXECæã¯ãã¹ãããå ã§å®è¡ããããã°ã©ã ãŸãã¯ããã·ãŒãžã£ãæå®ããŸãã
DDïŒããŒã¿å®çŸ©ïŒã¹ããŒãã¡ã³ãã¯ãããã°ã©ã ãèªã¿æžãããããŒã¿ã»ãããããã®å Žæã圢åŒãããã³åŠçæ¹æ³ãå«ããŠå®çŸ©ããŸãã
JCL
//PAYBATCH JOB (ACCT#7), 'PAYROLL RUN',
// CLASS=A, MSGCLASS=X, NOTIFY=&SYSUID
//*
//STEP010 EXEC PGM=PAYROLL1
//STEPLIB DD DSN=PROD.PAYROLL.LOADLIB,DISP=SHR
//EMPFILE DD DSN=PROD.PAYROLL.EMPLOYEE,DISP=SHR
//TRANSACT DD DSN=PROD.PAYROLL.TRANS.D&&DATE,DISP=SHR
//PAYRPT DD SYSOUT=A
//SYSOUT DD SYSOUT=*
//SYSIN DD DUMMY
ãã®äŸã§ã¯: PAYBATCH ãžã§ãåã§ãã STEP010 ããã¯ä»äºã®ã¹ãããã®1ã€ã§ãã PGM=PAYROLL1 COBOL ããã°ã©ã ã®ååãæå®ããDD ã¹ããŒãã¡ã³ãã¯ããã°ã©ã ãã¢ã¯ã»ã¹ã§ãããã¹ãŠã®ãã¡ã€ã«ãå®çŸ©ããŸãã PAYROLL1 ç¥ããªãããæ°ã«ãããªã EMPFILE or TRANSACT ç©ççãªå ŽæããååŸãããããŒã¿ã¯ãDDåã§èªã¿åãããŸããJCLã¯å®è¡éå§åã«ãç©ççãªå Žæãã¬ã³ãŒã圢åŒãããã³ã¢ã¯ã»ã¹ã¢ãŒãã解決ããŸãã
JCLã«ã¿ãã°ç»é²æžã¿ããã·ãŒãžã£ïŒPROCïŒ
ã¡ã€ã³ãã¬ãŒã ããŒã ã¯ããã¹ãŠã®ãžã§ãã«å¯ŸããŠåãJCLãã¿ãŒã³ãäœæããã®ã§ã¯ãªããåå©çšå¯èœãªå®è¡ãã¿ãŒã³ãã«ãã»ã«åããã«ã¿ãã°ããã·ãŒãžã£ïŒPROCïŒãå®çŸ©ããŸããPROCã¯ããã·ãŒãžã£ã©ã€ãã©ãªã«æ ŒçŽããããã³ãã¬ãŒãã§ãããåã ã®ãžã§ãã¯ãããåç §ããå¿ èŠã«å¿ããŠç¹å®ã®ãã©ã¡ãŒã¿ãäžæžãããŸãã
JCL
//PAYPROC PROC RUNDATE=TODAY
//COMPILE EXEC PGM=IGYCRCTL,PARM='OBJECT,NODUMP'
//SYSIN DD DSN=PROD.COBOL.SRC(&MEMBER),DISP=SHR
//SYSOBJ DD DSN=&&OBJSET,DISP=(NEW,PASS),
// UNIT=SYSDA,SPACE=(TRK,(10,5))
//LKED EXEC PGM=IEWL,PARM='LIST,LET,XREF'
//SYSLIN DD DSN=&&OBJSET,DISP=(OLD,DELETE)
//SYSLMOD DD DSN=PROD.PAYROLL.LOADLIB(&MEMBER),
// DISP=SHR
// PEND
ãžã§ãããPROCãåŒã³åºãïŒ
JCL
//COMPILE EXEC PAYPROC,MEMBER=PAYROLL1,RUNDATE=20251205
ãã®åäžã® EXEC ã¹ããŒãã¡ã³ãã¯ãå®è¡æã«å®å
šãª PROC ã«å±éããã MEMBER (NAIST) ãš RUNDATE ã©ãã§ã眮ãæãããã &MEMBER (NAIST) ãš &RUNDATE PROC ã¯ãJCL ãã COBOL ãžã®ãããã³ã°ãè€éã«ãªãäž»ãªçç±ã® 1 ã€ã¯ããžã§ããåäžã® PROC åç
§ãä»ããŠæ°ååã® COBOL ããã°ã©ã ãåŒã³åºãå¯èœæ§ããããå®éã«åŒã³åºãããããã°ã©ã ã¯å®è¡ããšã«å€åããã·ã³ãã« ãã©ã¡ãŒã¿ã«äŸåããŸãã
JCLãšCOBOLã®éãã¯äœã§ããïŒ
JCLãšCOBOLã¯ãã°ãã°äžç·ã«èªãããŸãããããããå šãç°ãªã圹å²ãæ ã£ãŠããŸããã©ã¡ããã仿¹ã眮ãæããããšã¯ãªããã¡ã€ã³ãã¬ãŒã ã®ãããåŠçãæ©èœãããã«ã¯äž¡æ¹ãšãå¿ èŠã§ãã
| 次å | JCL | COBOL |
|---|---|---|
| ç®ç | å®è¡ãçµ±æ¬ãã | ããžãã¹ããžãã¯ãå®è£ ãã |
| ãããå®çŸ©ãããã® | ãžã§ããã¹ãããããã¡ã€ã«ãæ¡ä»¶ | ããã°ã©ã ãããŒã¿æ§é ãèšç® |
| å®è¡æ | ããã°ã©ã å®è¡åïŒã»ããã¢ããïŒãšå®è¡åŸïŒã¯ãªãŒã³ã¢ããïŒ | ããã°ã©ã å®è¡äž |
| ããŒã¿ã®èªã¿æžã | ããŒã¿ã»ããå²ãåœãŠïŒDDã¹ããŒãã¡ã³ãïŒã«ãã | ãã¡ã€ã«ã»ã¯ã·ã§ã³ãšREAD/WRITEã¹ããŒãã¡ã³ããä»ã㊠|
| ãšã©ãŒåŠç | æ»ãã³ãŒããæ¡ä»¶ä»ãã¹ãããå®è¡ | äŸå€ãã³ãã©ããšã©ãŒã«ãŒãã³ã®å®è¡ |
| æºåž¯æ§ | IBM z/OSåºæ | ã³ã³ãã€ã©ã«ãããã©ãããã©ãŒã éã§ç§»æ€å¯èœ |
| èª°ãæžããã®ã | ã·ã¹ãã ããã°ã©ããŒãããããšã³ãžã㢠| ã¢ããªã±ãŒã·ã§ã³éçºè |
| çŸä»£ã®åçå | CI/CDãã€ãã©ã€ã³ïŒã³ã³ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ | ã¢ããªã±ãŒã·ã§ã³ã³ãŒãïŒJavaãPythonãC++ïŒ |
ãã®é¢ä¿æ§ãæãç°¡åã«çè§£ããæ¹æ³ã¯ãJCLããããã€ã¡ã³ãããã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³å±€ãCOBOLãã¢ããªã±ãŒã·ã§ã³å±€ã§ãããšèããããšã§ããææ°ã®ã¯ã©ãŠããã€ãã£ãã·ã¹ãã ã§ã¯ãJCLã®åœ¹å²ã¯Kubernetesãžã§ããããã§ã¹ããã·ã§ã«ã¹ã¯ãªãããCI/CDãã€ãã©ã€ã³ã¹ããŒãžã«ãã£ãŠæ ãããCOBOLã®åœ¹å²ã¯JavaãPythonããŸãã¯Goã§èšè¿°ãããã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ã«ãã£ãŠæ ãããŸãã
JCLãCOBOLãåŒã³åºãæ¹æ³ïŒå®è¡ãã§ãŒã³
JCLãžã§ãããCOBOLå®è¡ãŸã§ã®çµè·¯ã¯ãäžè²«ããæµãããã©ããŸããåã¹ããããçè§£ããããšããJCLããCOBOLãžã®ãããã³ã°ã§äœãæããã¹ãããçè§£ããããã®åºç€ãšãªããŸãã
ã¹ããã1ïŒãžã§ãã®æå ¥ãJCLãžã§ãã¯ãžã§ãå ¥åãµãã·ã¹ãã ïŒJESïŒã«æå ¥ãããŸããJESã¯ãžã§ãããã¥ãŒã«å ¥ãããã®ã¹ããŒãã¡ã³ãã®èªã¿åããéå§ããŸãã
ã¹ããã2ïŒã¹ãããèšå®ãåEXECã¹ãããã«ãããŠãã·ã¹ãã ã¯STEPLIB DDã¹ããŒãã¡ã³ãã§æå®ãããããŒãã©ã€ãã©ãªããæå®ãããããã°ã©ã ãæ€çŽ¢ããŸããSTEPLIBãæå®ãããŠããªãå Žåã¯ãã·ã¹ãã ã¯ã·ã¹ãã ãªã³ã¯ã©ã€ãã©ãªãæ€çŽ¢ããŸãã
ã¹ããã3ïŒããŒã¿ã»ããã®å²ãåœãŠãããã°ã©ã ã®å®è¡åã«ãã·ã¹ãã ã¯ã¹ãããå ã®DDã¹ããŒãã¡ã³ãã§å®çŸ©ããããã¹ãŠã®ããŒã¿ã»ãããå²ãåœãŠãŸããããã«ã¯ããã¡ã€ã«ã®ãªãŒãã³ãå ¥åããŒã¿ã»ããã®ååšç¢ºèªãããã³åºåããŒã¿ã»ããã®äœæãå«ãŸããŸãã
ã¹ããã4ïŒããã°ã©ã ã®å®è¡ã COBOLããã°ã©ã ãå®è¡ãããŸããJCLã§å®çŸ©ãããddnameã䜿çšããŠãã¡ã€ã«ã«ã¢ã¯ã»ã¹ããŸãã OPEN INPUT EMPFILE COBOLã§ã¯ãDDã¹ããŒãã¡ã³ãã«çŽæ¥ãããã³ã°ãããŸãã EMPFILE JCLã«ãããŠã
ã¹ããã5ïŒæ»ãã³ãŒãã®è©äŸ¡ã COBOLããã°ã©ã ãçµäºãããšããªã¿ãŒã³ã³ãŒããèšå®ãããŸãïŒéåžžãæåã®å Žåã¯0ãèŠåã®å Žåã¯4ããšã©ãŒã®å Žåã¯8ãé倧ãªãšã©ãŒã®å Žåã¯12ãŸãã¯16ïŒãJCLã¯ããã䜿çšããŸã COND ãã©ã¡ãŒã¿ãŸã㯠IF/THEN/ELSE ãã®ã³ãŒãã«åºã¥ããŠãåŸç¶ã®ã¹ããããå®è¡ãããã©ããã倿ããããã®æ§æèŠçŽ ã
ã¹ããã6ïŒããŒã¿ã»ããã®åŠçããã®ã¹ãããã®åŸãã·ã¹ãã ã¯åDDã¹ããŒãã¡ã³ãã§å®çŸ©ãããããŒã¿ã»ããã®åŠçïŒä¿æãåé€ãã«ã¿ãã°åãã«ã¿ãã°è§£é€ããŸãã¯æ¬¡ã®ã¹ããããžã®å®è¡ïŒãå®è¡ããŸãã
次ã®äŸã¯ããã®åŠçãã§ãŒã³ãå®éã«ã©ã®ããã«èŠãããã瀺ããŠããŸããå·ŠåŽãJCLãå³åŽãããã«å¯Ÿå¿ããCOBOLèŠçŽ ã§ãã
JCL
//STEP020 EXEC PGM=ACCTREC
//STEPLIB DD DSN=PROD.ACCOUNT.LOADLIB,DISP=SHR
//INFILE DD DSN=PROD.ACCT.DAILY.INPUT,DISP=SHR â maps to COBOL SELECT/ASSIGN
//OUTFILE DD DSN=PROD.ACCT.PROCESSED, â maps to COBOL SELECT/ASSIGN
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(5,2),RLSE)
//RPTFILE DD SYSOUT=A â maps to COBOL WRITE report
//SYSOUT DD SYSOUT=*
COBOLããã°ã©ã ACCTREC å«ãŸããŠããŸãã
COBOL
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INFILE ASSIGN TO INFILE. *> maps to DD INFILE
SELECT OUTFILE ASSIGN TO OUTFILE. *> maps to DD OUTFILE
SELECT RPTFILE ASSIGN TO RPTFILE. *> maps to DD RPTFILE
DATA DIVISION.
FILE SECTION.
FD INFILE
RECORDING MODE IS F
BLOCK CONTAINS 0 RECORDS
RECORD CONTAINS 200 CHARACTERS.
01 ACCOUNT-RECORD.
05 ACCT-NUMBER PIC X(10).
05 ACCT-BALANCE PIC S9(13)V99 COMP-3.
05 ACCT-STATUS PIC X(2).
ãã® SELECT INFILE ASSIGN TO INFILE COBOLã®FILE-CONTROLã»ã¯ã·ã§ã³ã¯ãDDã¹ããŒãã¡ã³ãã«æ¥ç¶ããŸãã INFILE JCLã§ã¯ããããåºæ¬çãªãããã³ã°é¢ä¿ã§ããCOBOLã¯è«çãã¡ã€ã«åã䜿çšããJCLã¯ããããç©çããŒã¿ã»ããã«è§£æ±ºããŸãã
JCLã®ç°åžžçµäºã³ãŒãïŒãã®æå³
JCL ã¢ãã³ã ã³ãŒã (ç°åžžçµäºã³ãŒã) ã¯ããžã§ã ã¹ããããäºæããçµäºããçç±ã瀺ããŸãããžã§ãåºåã«ã¯æ¬¡ã®ããã«è¡šç€ºãããŸãã S000 ïŒã·ã¹ãã ç°åžžçµäºïŒãŸã㯠U0000 ïŒãŠãŒã¶ãŒç°åžžçµäºïŒã³ãŒããããããžã§ãã®å€±æã蚺æããã«ã¯ããããã®ã³ãŒããçè§£ããããšãäžå¯æ¬ ã§ãã
| ç°åžžçµäºã³ãŒã | ã¿ã€ã | äžè¬çãªåå |
|---|---|---|
| S001 | ã·ã¹ãã | ããŒã¿ã»ããã®èªã¿åããŸãã¯æžã蟌ã¿äžã«I/Oãšã©ãŒãçºçããŸãã |
| S013 | ã·ã¹ãã | JCL DDãšCOBOL FDéã®DCB屿§ã®äžäžèŽãã¬ã³ãŒãé·ã®äžäžèŽããŸãã¯ãã©ãŒãããã®äžäžèŽ |
| S0C4 | ã·ã¹ãã | ã¹ãã¬ãŒãžä¿è·äŸå€ãçºçããŸãããããã°ã©ã ãå²ãåœãŠãããé åå€ã®ã¡ã¢ãªã«ã¢ã¯ã»ã¹ããããšããŸããã |
| S0C7 | ã·ã¹ãã | ããŒã¿äŸå€ãéæ°å€ããŒã¿ã«å¯Ÿããç®è¡æŒç®ã®è©Šè¡ïŒCOBOLã§éåžžã«ããçºçããç°åžžçµäºïŒ |
| S322 | ã·ã¹ãã | æéå¶éãè¶ éããŸããããžã§ãã®å®è¡æéãTIMEãã©ã¡ãŒã¿ã§èš±å¯ãããæéãè¶ ããŸããã |
| S806 | ã·ã¹ãã | ããŒãã¢ãžã¥ãŒã«ãèŠã€ãããŸãããEXEC PGM= ã§æå®ãããããã°ã©ã ã¯ãæ€çŽ¢ãããããŒãã©ã€ãã©ãªã«ååšããŸããã |
| S913 | ã·ã¹ãã | ããŒã¿ã»ãããžã®ã¢ã¯ã»ã¹ã»ãã¥ãªãã£éåãRACFãŸãã¯åçã®ã¢ã¯ã»ã¹æåŠ |
| U0000 | ãŠãŒã¶ãŒ | ã¢ããªã±ãŒã·ã§ã³å®çŸ©ã®ç°åžžçµäºãCOBOLããã°ã©ã ããŠãŒã¶ãŒã³ãŒãã䜿çšããŠSTOP RUNãåŒã³åºããŸãã |
| U4076 | ãŠãŒã¶ãŒ | IMSåºæã®ç°åžžçµäºãããŒã¿ããŒã¹ã¢ã¯ã»ã¹å€±æ |
æãäžè¬çãªçç£ç°åžžçµäºã S0C7ããã¯ãCOBOLããã°ã©ã ãã¹ããŒã¹ã鿰倿åãå«ããã£ãŒã«ãã«å¯ŸããŠç®è¡æŒç®ãå®è¡ããããšãããšãã«çºçããŸããå
žåçãªåå ã¯ãCOBOLããã°ã©ã ã§æ³å®ãããããŒã¿åœ¢åŒãšJCLã«ãã£ãŠå®éã«æäŸãããããŒã¿åœ¢åŒãšã®äžäžèŽã§ããããã¯ãŸãã«ãJCL-to-COBOLãããã³ã°ã«ãã£ãŠãæ·±å€ã®éçšé害ãçºçããåã«æããã«ãªãçš®é¡ã®äžäžèŽã§ãã
CONDãã©ã¡ãŒã¿ãšæ¡ä»¶ä»ãå®è¡
JCL ã¯ãåã®ã¹ãããããã®æ»ãã³ãŒãã«åºã¥ããŠã©ã®ã¹ããããå®è¡ããããå¶åŸ¡ããŸãã COND ãã©ã¡ãŒã¿ ã䜿çšããŸãã
JCL
//STEP010 EXEC PGM=VALIDATE,COND=(4,LT)
//STEP020 EXEC PGM=PROCESS, COND=(4,LT,STEP010)
//STEP030 EXEC PGM=CLEANUP, COND=(0,NE,STEP010)
COND=(4,LT) ã€ãŸããåã®ã¹ãããã®æ»ãã³ãŒãã4æªæºã®å Žåããã®ã¹ããããã¹ãããããŸãã COND=(4,LT,STEP010) ã€ãŸããSTEP010ã®æ»ãã³ãŒãã4æªæºã®å Žåã¯ããã®ã¹ããããã¹ãããããŸãã COND=(0,NE,STEP010) ã€ãŸããSTEP010ã®æ»ãã³ãŒãã0ã§ãªãå Žåã¯STEP030ãã¹ãããããSTEP010ãæåããå Žåã«ã®ã¿ã¯ãªãŒã³ã¢ãããå®è¡ããŸãã
çŸä»£ã® JCL 㯠IF/THEN/ELSE/ENDIF 代ããã«ãããèªã¿ãããããã«ä»¥äžã®ããã«èšè¿°ããŸãã
JCL
//IF010 IF (STEP010.RC = 0) THEN
//STEP020 EXEC PGM=PROCESS
// ENDIF
//IF020 IF (STEP010.RC > 4) THEN
//STEP030 EXEC PGM=ERRORHANDLER
// ENDIF
æ¡ä»¶ä»ãå®è¡ãã¹ã®ãããã³ã°ã¯ãJCLããCOBOLãžã®åæã«ãããŠæãéèŠã§ãããªãããæãèŠèœãšãããã¡ãªèŠçŽ ã®äžã€ã§ããåã®ã¹ãããã倱æããå Žåã«ã®ã¿å®è¡ãããCOBOLããã°ã©ã ã¯ããšã©ãŒæ¡ä»¶ãããŒã«ããã¯ããžãã¯ããŸãã¯ãªã«ããªæé ãåŠçããŠããå¯èœæ§ããããŸãããããã®æ©èœã¯ããããå¶åŸ¡ããJCLãèæ ®ããã«COBOLãœãŒã¹ã ããèŠãŠããå šãèŠããŸããã
JCLãCOBOLãããã³DB2ïŒ3å±€ã¹ã¿ãã¯
ã»ãšãã©ã®ã¡ã€ã³ãã¬ãŒã ãã©ã³ã¶ã¯ã·ã§ã³ã·ã¹ãã ã§ã¯ãJCLãšCOBOLã«å ããŠãIBMã®ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã§ããDB2ãšãã第3ã®ã³ã³ããŒãã³ãã䜿çšãããŸããCOBOLããã°ã©ã ã¯ãåã蟌ã¿SQLæïŒEXEC SQLãããã¯ïŒãä»ããŠDB2ã«ã¢ã¯ã»ã¹ããŸããJCLã¯ãç¹å®ã®DDæãä»ããŠDB2ãµãã·ã¹ãã æ¥ç¶ãšDBRMïŒããŒã¿ããŒã¹èŠæ±ã¢ãžã¥ãŒã«ïŒã管çããŸãã
JCL
//DBRM DD DSN=PROD.DBRMLIB.DATA(ACCTREC),DISP=SHR
//SYSPRINT DD SYSOUT=*
COBOL
WORKING-STORAGE SECTION.
EXEC SQL
INCLUDE SQLCA
END-EXEC.
PROCEDURE DIVISION.
MAIN-LOGIC.
EXEC SQL
SELECT ACCT_BALANCE, ACCT_STATUS
INTO :WS-BALANCE, :WS-STATUS
FROM ACCOUNT_MASTER
WHERE ACCT_NUMBER = :WS-ACCT-NUM
END-EXEC.
IF SQLCODE NOT = 0
PERFORM DB2-ERROR-ROUTINE
END-IF.
JCL-COBOL-DB2ã¹ã¿ãã¯ã§ã¯ãJCLãå®è¡ç°å¢ãšããŒã¿ã»ãããžã®ã¢ã¯ã»ã¹ãæäŸããCOBOLãããžãã¹ããžãã¯ãå®è£ ããŠããŒã¿ããŒã¹ãåŒã³åºããDB2ãCOBOLããã°ã©ã ã«åã蟌ãŸããSQLã«åŸã£ãŠããŒã¿ãæ ŒçŽããã³ååŸããŸããDB2ã䜿çšããCOBOLããã°ã©ã ã®å®å šãªäŸåé¢ä¿ãããã«ã¯ãã©ã®JCLãžã§ãããã®ããã°ã©ã ãåŒã³åºããã ãã§ãªããã©ã®DB2ããŒãã«ãèªã¿æžãããããã©ã®åã«ã¢ã¯ã»ã¹ãããããããŠã©ã®ä»ã®ããã°ã©ã ãåãããŒãã«ã«ã¢ã¯ã»ã¹ããããå«ããå¿ èŠããããŸãããªããªããããŒãã«ã®ã¹ããŒã倿Žã¯ããã®ããŒãã«ãåç §ãããã¹ãŠã®COBOLããã°ã©ã ã«åœ±é¿ãäžããããã§ãã
JCLããCOBOLãžã®ãããã³ã°ãè¿ä»£åã«ãšã£ãŠéèŠãªçç±
JCLãCOBOLã«ãããã³ã°ããããšã¯ãäž»ã«æè¡çãªäœæ¥ã§ã¯ãããŸããããªã¹ã¯ç®¡çã®äœæ¥ã§ããJCLãã©ã¡ãŒã¿ã®å€æŽãã¹ãããã®è¿œå ãããŒã¿ã»ããåã®å€æŽããžã§ããåŒã³åºãCOBOLããã°ã©ã ã®å€æŽãªã©ãã¡ã€ã³ãã¬ãŒã ã·ã¹ãã ãžã®ãããã倿Žã¯ã倿Žãããã³ã³ããŒãã³ãã«ãšã©ãŸãããåºç¯å²ã«åœ±é¿ãåãŒããŸãã倿Žãè¡ãåã«ããããã®åœ±é¿ç¯å²ãæ£ç¢ºã«ææ¡ããå¯äžã®æ¹æ³ã¯ãæ¢åã®ã·ã¹ãã ãšããããã©ã®ããã«æ¥ç¶ãããŠããããå®å šã«ææ¡ããããšã§ãã
ç§»è¡åïŒãããã¯ãŒã¯ããŒããã¡ã€ã³ãã¬ãŒã ããã¯ã©ãŠãã«ç§»è¡ããã«ã¯ãã©ã®JCLãžã§ããååšããããããããã©ã®COBOLããã°ã©ã ãåŒã³åºãããã©ã®ããŒã¿ã»ãããã¹ãããéã§ããåããããããå®è¡é åºã¯ã©ããªã£ãŠããããã¹ãããã倱æããå Žåã«äœãèµ·ããããææ¡ããŠããå¿ èŠããããŸãããã®ãããããªããã°ãç§»è¡ããŒã ã¯äžå®å šãªããã¥ã¡ã³ãããããã¯ããã¥ã¡ã³ãããŸã£ãããªãç¶æ ã§äœæ¥ããããšã«ãªããŸãããã®çµæãã¹ããããæŒããããäŸåé¢ä¿ãæ¬çªç°å¢ã§çºèŠãããããåãæ¿ãæ¥ãé ãããããå¯èœæ§ããããŸãã
ã³ãŒã倿Žãè¡ãåã«ïŒã©ã®JCLãžã§ããCOBOLããã°ã©ã ãåŒã³åºããã確èªããã«COBOLããã°ã©ã ã倿Žãããšãç°ãªãæ¡ä»¶äžãç°ãªãããŒã¿ã»ããæ§æã§å®è¡ããããžã§ããåäœããªããªãå¯èœæ§ããããŸããããŒã«ã«ãªå€æŽã«èŠããJCLãã©ã¡ãŒã¿ã®å€æŽã§ããç¹å®ã®ããŒã¿ã»ãã屿§ã«äŸåããCOBOLããã°ã©ã ã®åäœã«åœ±é¿ãäžããå¯èœæ§ããããŸãã圱é¿åæãè¡ãã«ã¯ã倿Žãè¡ãåã«JCLããCOBOLããããŠããŒã¿ã»ããã«è³ãå®å šãªé£éãææ¡ããŠããå¿ èŠããããŸãã
ç¥èã®ç¶æ¿ã«ã€ããŠïŒãããã·ã¹ãã ã20幎éä¿å®ããŠããCOBOLéçºè ãéè·ããéãJCLãžã§ããšCOBOLããã°ã©ã ãã©ã®ããã«é£æºããããšããæŠå¿µã¢ãã«ãäžç·ã«æã¡å»ã£ãŠããŸããŸããææžåãããããããããããã®ç¥èãæ¬¡ã®ããŒã ã«ç¶æ¿ããå¯äžã®ææ®µã§ããããããªããã°ãæ°ããéçºè ã¯å®å šã«ä¿®æ£ã§ããªãã·ã¹ãã ãåŒãç¶ãããšã«ãªããŸãã
ã³ã³ãã©ã€ã¢ã³ã¹ç£æ»ã®å ŽåïŒèŠå¶ç£æ»ã§ã¯ã財åèšç®ãããŒã¿å€æãã¢ã¯ã»ã¹å¶åŸ¡ãææžåããããšããã«åäœããŠããããšã蚌æããå¿ èŠãããå ŽåããããããŸããJCLãšCOBOLã®é¢ä¿ãææžåãããŠããªãå Žåãç£æ»ã®å§åäžã§ã·ã¹ãã ããªããŒã¹ãšã³ãžãã¢ãªã³ã°ããªãéããããã蚌æããããšã¯äžå¯èœã§ãã
JCL管çããŒã«ããã³åæãã©ãããã©ãŒã
ãã®èšäºã®æ€çŽ¢ã³ã³ãœãŒã«ã®ããŒã¿ãå€èšèªå¯Ÿå¿ã§ããããšïŒã€ã¿ãªã¢èªããã©ã³ã¹èªãã¹ãã€ã³èªãæ¥æ¬èªããã€ãèªã§JCL管çããŒã«ã«é¢ããã¯ãšãªãå«ãŸããŠããïŒã¯ãã¡ã€ã³ãã¬ãŒã ITã³ãã¥ããã£ãããã«ã°ããŒãã«ã«åæ£ããŠãããããããŠããããå°åã®ããŒã ãããã«äžè²«ããŠåãåé¡ã«çŽé¢ããŠããããåæ ããŠãããã€ãŸããJCLãšCOBOLã®ããã¥ã¡ã³ããäžå®å šãå€ããªã£ãŠããããããã¯ååšããªããšããããšã ã
JCLã®åæãšç®¡çã«å©çšã§ããããŒã«ã¯ã以äžã®3ã€ã®ã«ããŽãªã«åé¡ãããŸãã
IBMãã€ãã£ãããŒã«ïŒIBMã¯ããžã§ãå ¥åãµãã·ã¹ãã æ©èœãJESã¹ããŒã«ç®¡çãããã³IBM z/OSãããã©ã³ã¿ã€ã ãæäŸããŠããŸãããããã¯å®è¡ãšç£èŠãåŠçããŸãããããã°ã©ã éã®äŸåé¢ä¿åæãèŠèŠåæ©èœã¯æäŸããŸããã
ãµãŒãããŒãã£è£œã®ãžã§ãã¹ã±ãžã¥ãŒã©ïŒCA7ãTWSïŒTivoli Workload SchedulerïŒãBroadcomã®ESP Workload Automationãªã©ïŒã¯ãæ°åãã®ãžã§ãã«ããããããã¹ã±ãžã¥ãŒãªã³ã°ã管çããäŸåé¢ä¿ã«åºã¥ããã¹ã±ãžã¥ãŒãªã³ã°ãæäŸããé害çºçæã«ã¯ã¢ã©ãŒããçºä¿¡ããŸãããããã®ã¹ã±ãžã¥ãŒã©ã¯ãžã§ãã¬ãã«ã®äŸåé¢ä¿ãçè§£ãââãŸãããéåžžã¯åã¹ãããå ã§åŒã³åºãããCOBOLããã°ã©ã ãåæããŸããã
éçã³ãŒãè§£æããã³äŸåé¢ä¿ãããã³ã°ãã©ãããã©ãŒã ïŒJCLããã³COBOLãœãŒã¹ã³ãŒããè§£æããã©ã®ãžã§ããã©ã®ããã°ã©ã ãåŒã³åºãããã©ã®ããã°ã©ã ãã©ã®ããŒã¿ã»ããã«ã¢ã¯ã»ã¹ãããããããŠã·ã¹ãã å šäœã§ããŒã¿ãã©ã®ããã«æµããããšãã£ãæ§é ã¢ãã«ãæ§ç¯ããããŒã«ã§ãããããã®ããŒã«ã¯ããžã§ãã¹ã±ãžã¥ãŒã©ãIBMãã€ãã£ãããŒã«ã§ã¯äžå¯èœãªãã¬ã€ã€ãŒéã®å¯èŠæ§ãæäŸããŸããäŸãã°ãç¹å®ã®JCL DDã¹ããŒãã¡ã³ããšããã«ãããã³ã°ãããCOBOL FILE-CONTROLãšã³ããªãšã®é¢ä¿ããããã¯ããŒã¿ã»ããã«æžã蟌ãCOBOLããã°ã©ã ãšããã®ããŒã¿ã»ãããå ¥åãšããŠèªã¿èŸŒã次ã®ãžã§ããšã®é¢ä¿ãªã©ãææ¡ã§ããŸãã
SMART TS XL ãã®ããŒã«ã¯ããã®ç¬¬3ã®ã«ããŽãªã«å±ããCOBOLãJCLãPL/Iãã¢ã»ã³ãã©ãSQLãJavaãªã©ãäŒæ¥ç°å¢ã«ãããããããèšèªãç¶²çŸ ããããã«æ¡åŒµãããŠãããåäžèšèªããŒã«ã§ã¯å®çŸã§ããªãèšèªæšªæçãªæ§é åæãæäŸããŸãã
èªå®æ¡ä»¶ SMART TS XL ãšã³ã¿ãŒãã©ã€ãºèŠæš¡ã§JCLãCOBOLã«ãããã³ã°ããŸã
JCLããCOBOLãžã®æåãããã³ã°ã¯ã3ã¹ãããã®åäžãžã§ãã§ããã°åŠçå¯èœã§ãããããã5äžåã®JCLãžã§ãã20äžåã®COBOLããã°ã©ã ããããŠ40幎以äžã«ããã£ãŠèç©ãããæ°çŸäžä»¶ã®ããŒã¿ã»ããåç §ãæ±ããçµç¹ã§ã¯ãåŠçã¯äžå¯èœã§ããç¹å®ã®ããã·ãŒãžã£ããã®ããã·ãŒãžã£ãåŒã³åºãããã«äœ¿çšãããã·ã³ãã«ãã©ã¡ãŒã¿ããããã®ãã©ã¡ãŒã¿ã解決ãããCOBOLããã°ã©ã ããããŠãããã®ããã°ã©ã ãã¢ã¯ã»ã¹ããããŒã¿ã»ããéã®é¢ä¿ãããã®èŠæš¡ã§æäœæ¥ã§è¿œè·¡ããããšã¯äžå¯èœã§ãã
SMART TS XL JCLããã³COBOLã®ãœãŒã¹ã³ãŒãïŒã·ã³ãã«ãã©ã¡ãŒã¿çœ®æãå«ãPROCãã€ã³ã¹ããªãŒã ããã·ãŒãžã£ãINCLUDEã¡ã³ããŒããªãŒããŒã©ã€ããæ¡ä»¶ä»ãå®è¡ããžãã¯ãªã©ïŒãè§£æããã·ã¹ãã å ã®ãã¹ãŠã®æ§é çé¢ä¿ã衚ãçµ±åãããçžäºåç §ã¢ãã«ãæ§ç¯ããŸãããã®ã¢ãã«ã¯ãæåã§æŽæ°ãããããã¥ã¡ã³ããšããŠç¶æãããã®ã§ã¯ãªãããœãŒã¹ããåçæããããããã¯ãšãªå¯èœã§ããã²ãŒã·ã§ã³ãå¯èœã§ãããåžžã«ææ°ã®ç¶æ ã«ä¿ãããŸãã
ãã® JCLã®æ¡åŒµ ãã®æ©èœã¯ãã·ã³ãã«ãã©ã¡ãŒã¿çœ®æã解決ããŠãåŒã³åºãå
ã®ãžã§ãããšã«é©çšããããªãŒããŒã©ã€ããèæ
®ããªãããä»»æã® PROC ã«ãã£ãŠåŒã³åºãããå®éã®ããã°ã©ã ãšããŒã¿ã»ããã衚瀺ããŸãã &PGMNAME ã·ã³ãã«ãã©ã¡ãŒã¿ã¯ãæªè§£æ±ºã®åç
§ãšããŠã§ã¯ãªãããã¹ãŠã®åŒã³åºãå
ã§è§£æ±ºããããã¹ãŠã®å
·äœçãªããã°ã©ã ãšããŠã¢ãã«ã«çŸããŸãã
ã¢ããªã±ãŒã·ã§ã³äŸåé¢ä¿ãããã³ã°æ©èœã¯ãJCLãžã§ãããCOBOLããã°ã©ã ãDB2ããŒãã«ããããŠããŠã³ã¹ããªãŒã ããã°ã©ã ã«è³ããŸã§ãã·ã¹ãã å ã®ãã¹ãŠã®ã³ã³ããŒãã³ããšãããã®éã®ãã¹ãŠã®æ¥ç¶ã瀺ãå®å šãªã°ã©ããæ§ç¯ããŸããè¿ä»£å倿Žãè¡ãåã«ãããŒã ã¯æ¬¡ã®ãããªã¯ãšãªãå®è¡ã§ããŸããã©ã®ãžã§ãããã®ããã°ã©ã ãåŒã³åºãã®ãïŒãã®ããã°ã©ã ã¯ã©ã®ããŒã¿ã»ãããèªã¿åãã®ãïŒä»ã®ã©ã®ããã°ã©ã ããããã®ããŒã¿ã»ããã«æžã蟌ãã®ãïŒã·ãŒã±ã³ã¹ã®æ¬¡ã®ãžã§ãã¯ã©ããïŒ
圱é¿åææ©èœã¯ãææ¡ããã倿Žã«å¯ŸããŠãåæããã圱é¿ç¯å²ãçæããŸããããšãã°ããã®ã³ããŒããã¯ã倿Žãããšããããå«ããã¹ãŠã®ããã°ã©ã ã衚瀺ãããŸãããã®ããŒã¿ã»ããã®ã¬ã€ã¢ãŠãã倿Žãããšããããåç §ãããã¹ãŠã® JCL DD ã¹ããŒãã¡ã³ãã衚瀺ãããŸãããžã§ããããã®ã¹ããããåé€ãããšããã®åºåã«äŸåãããã¹ãŠã®äžæµã¹ãããã衚瀺ãããŸãã
JCLããCOBOLãžã®ãããã³ã°ã«åãçµãããŒã ã«ãšã£ãŠ ã¬ã¬ã·ãŒã®è¿ä»£å ããã°ã©ã ã SMART TS XL ããã¯ãã¢ã¹ã¿ãã£ã¢ãTSRIãã¢ããã³ã¹ããªã©ã®è¿ä»£åãã³ããŒãå€æäœæ¥ãéå§ããåã«å¿ èŠãšããåºç€ãã€ãŸããæ¢åã®æ§é ã«é¢ããå®å šãã€æ£ç¢ºãªã€ã³ãã³ããªãæäŸãã倿ç¯å²ãä»®å®ã§ã¯ãªãåæã«åºã¥ããŠå®çŸ©ã§ããããã«ãããã®ã§ãã
å°å³ã¯é åãã®ãã®ã§ã¯ãªããåºçºç¹ã§ããã
JCLãšCOBOLã¯ä»åŸã䜿ããç¶ããã ããã絊äžèšç®ãä¿éºéè«æ±åŠçãèŠå¶å ±åæžã®äœæãéèååŒã®æ±ºæžãšãã£ããããåŠçã·ã¹ãã ã¯ãã¯ã©ãŠãç§»è¡ã®èšç»ãæ¿èªãè³é調éãå®è¡ãè¡ãããéãã¡ã€ã³ãã¬ãŒã äžã§çšŒåãç¶ãããã¯ã©ãŠãç§»è¡ã¯éåžžãæ°ã¶æã§ã¯ãªãæ°å¹ŽãèŠããããã»ã¹ã ããã®éãã·ã¹ãã ã®ä¿å®ãä¿®æ£ãçè§£ã¯äžå¯æ¬ ãšãªãã
JCLããCOBOLãžã®ãããã³ã°ã¯ãäžåºŠããã®ãããžã§ã¯ãã§ã¯ãããŸãããããã°ã©ã ã®å€æŽããžã§ãã®è¿œå ãããŒã¿ã»ããã®åç·šæãªã©ã«å¿ããŠæ§é ã¢ãã«ãåžžã«ææ°ã®ç¶æ ã«ä¿ã€ãç¶ç¶çãªåãçµã¿ã§ãããã®åãçµã¿ã«æè³ããããŒã ã¯ãæ¥çã®ã»ãšãã©ããã©ãã¯ããã¯ã¹ãšããŠæ±ãã·ã¹ãã ã«å¯ŸããŠããèªä¿¡ãæã£ãŠå€æŽãå ããããšãã§ããŸããããã§ãªãããŒã ã¯ãã·ã¹ãã ãå®å šã«ææ¡ã§ããªããŸãŸå€æŽãå ããŠãããäŸåé¢ä¿ã®æ¬ èœãã³ã³ãã€ã©ãšã©ãŒã«ã¯ãªããªããã®ã®ãæ·±å€3æã®ãããåŠçäžã«æ¬çªç°å¢ã§é害ãçºçãããããªç¶æ³ã«é¥ã£ãŠããŸãã