You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CICS与DB2环境下的COBOL程序中复用Copybook?

问题:如何在COBOL+CICS+DB2程序中复用包含CICS/DB2语句的Copybook

我正在学习COBOL、CICS和DB2技术,已开发一款实现伪事务CICS流程并与DB2交互的程序,该事务功能运行正常,但程序代码逐渐冗长。我想了解如何将包含CICS语句(EXEC CICS ...)、DB2语句或两者兼有的段落放入Copybook中实现复用。我已尝试使用COPY、INCLUDE甚至++INCLUDE语句,但均未成功。

原预处理、编译及链接JCL脚本

//COMPPRG  JOB 'COMPGDB',CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),             
//         NOTIFY=&SYSUID                                               
//PLIB     JCLLIB ORDER=(DFH510.CICS.SDFHPROC,                          
//         PROJECT.CICS.SOURCE,                                          
//         PROJECT.CICS.LINK,                                            
//         PROJECT.CICS.LOAD)                                            
//*---------------------------------------------------------------------
//*--------------- PRECOMPILATION DB2 ----------------------------------
//*---------------------------------------------------------------------
//PC       EXEC PGM=DSNHPC,                                             
//         PARM=('HOST(IBMCOB),APOST,XREF,DATE(ISO),NOSOURCE',''),      
//         REGION=4096K                                                 
//STEPLIB  DD DISP=SHR,DSN=DSNA10.SDSNLOAD                              
//SYSCIN   DD DSN=&DSNHOUT,DISP=(MOD,PASS),                            
//            SPACE=(800,(500,500)),UNIT=SYSDA                          
//SYSIN    DD DISP=SHR,DSN=PROJECT.CICS.SOURCE(PROGCLI)                    
//SYSLIB   DD DISP=SHR,DSN=PROJECT.CICS.COPYBOOK                         
//DBRMLIB  DD DISP=SHR,DSN=PROJECT.CICS.DBRM(PROGCLI)                    
//SYSPRINT DD SYSOUT=T                                                  
//SYSTERM  DD SYSOUT=T                                                  
//SYSUDUMP DD SYSOUT=*                                                  
//SYSUT1   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT2   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT3   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT4   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT5   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT6   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT7   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//*---------------------------------------------------------------------
//*--------------- TRADUCTEUR CICS    ----------------------------------
//*---------------------------------------------------------------------
//TRN    EXEC PGM=DFHECP1$,                                             
//            PARM='COBOL3',                       
//            REGION=4M,                                                
//            COND=(4,LT,PC)                                            
//STEPLIB  DD DSN=DFH510.CICS.SDFHLOAD,DISP=SHR                         
//SYSIN    DD DSN=&DSNHOUT,DISP=(OLD,DELETE)                           
//SYSPRINT DD SYSOUT=*                                                  
//SYSPUNCH DD DSN=&SYSCIN,                                             
//            DISP=(,PASS),UNIT=SYSDA,                                  
//            DCB=BLKSIZE=400,                                          
//            SPACE=(400,(400,100))                                     
//*---------------------------------------------------------------------
//*--------------- COMPILATEUR COBOL  ----------------------------------
//*---------------------------------------------------------------------
//COB      EXEC PGM=IGYCRCTL,REGION=4M,COND=((4,LT,PC),(4,LT,TRN)),     
//  PARM='NODYNAM,LIB,OBJECT,RES,APOST,MAP,XREF,NOSEQUENCE'             
//STEPLIB   DD DSN=IGY420.SIGYCOMP,DISP=SHR                             
//SYSLIB    DD DSN=PROJECT.CICS.COPYBOOK,DISP=SHR                        
//          DD DSN=PROJECT.CICS.LINK,DISP=SHR                                     
//          DD DSN=DFH510.CICS.SDFHCOB,DISP=SHR                         
//          DD DSN=DFH510.CICS.SDFHMAC,DISP=SHR                         
//          DD DSN=DFH510.CICS.SDFHSAMP,DISP=SHR                        
//SYSPRINT  DD SYSOUT=*                                                 
//SYSIN     DD DSN=&SYSCIN,DISP=(OLD,DELETE)                           
//SYSLIN    DD DSN=&LOADSET,DISP=(MOD,PASS),                           
//             UNIT=SYSDA,SPACE=(80,(250,100))                          
//SYSUT1   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT2   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT3   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT4   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT5   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT6   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT7   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                                  

修改后的可行JCL脚本

尝试了@cschneid的建议后问题已解决,以下是更新后的脚本:

//COMPPRG  JOB 'COMPGDB',CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),             
//         NOTIFY=&SYSUID                                               
//PLIB     JCLLIB ORDER=(DFH510.CICS.SDFHPROC,                          
//         PROJECT.CICS.SOURCE,                                          
//         PROJECT.CICS.LINK,                                            
//         PROJECT.CICS.LOAD)                                            
//COB      EXEC PGM=IGYCRCTL,REGION=4M,                                 
// PARM=('NODYNAM,LIB,OBJECT,RES,APOST,MAP,XREF,NOSEQUENCE,CICS,SQL')   
//STEPLIB   DD DSN=IGY420.SIGYCOMP,DISP=SHR                             
//          DD DSN=DFH510.CICS.SDFHLOAD,DISP=SHR                        
//          DD DISP=SHR,DSN=DSNA10.SDSNLOAD                             
//SYSLIB    DD DSN=PROJECT.CICS.COPYBOOK,DISP=SHR
//          DD DSN=PROJECT.CICS.LINK,DISP=SHR                            
//          DD DSN=DFH510.CICS.SDFHCOB,DISP=SHR                         
//          DD DSN=DFH510.CICS.SDFHMAC,DISP=SHR                         
//          DD DSN=DFH510.CICS.SDFHSAMP,DISP=SHR                        
//DBRMLIB   DD DSN=PROJECT.CICS.DBRM(PROGCLI),DISP=SHR                   
//SYSPRINT  DD SYSOUT=*                                                 
//SYSIN     DD DSN=PROJECT.CICS.SOURCE(PROGCLI),DISP=SHR                 
//SYSLIN    DD DSN=&LOADSET,DISP=(MOD,PASS),                           
//             UNIT=SYSDA,SPACE=(80,(250,100))                          
//SYSUDUMP DD SYSOUT=*                                                  
//SYSUT1   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT2   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT3   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT4   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT5   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT6   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT7   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA   
//SYSUT8   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT9   DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT10  DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT11  DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT12  DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT13  DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT14  DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//SYSUT15  DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA                  
//*--------------- LINKAGE PROG COBOL -------------------------------
//LKED   EXEC PGM=IEWL,REGION=4M,                                       
//            COND=(5,LT,COB),                                          
//            PARM='LIST,XREF'                                          
//SYSLIB   DD DSN=DFH510.CICS.SDFHLOAD,DISP=SHR                         
//         DD DSN=CEE.SCEELKED,DISP=SHR                                 
//         DD DSN=DSNA10.SDSNLOAD,DISP=SHR    
//         DD DSN=ISP.SISPLOAD,DISP=SHR                                 
//         DD DSN=GDDM.SADMMOD,DISP=SHR                                 
//         DD DSN=PROJECT.CICS.LOAD,DISP=SHR                             
//DBRMLIB  DD DISP=SHR,DSN=ZANKOC.CICS.DBRM(PROGCLI)                    
//SYSLMOD  DD DSN=PROJECT.CICS.LOAD(PROGCLI),DISP=SHR                    
//SYSUT1   DD UNIT=SYSDA,DCB=BLKSIZE=1024,SPACE=(1024,(200,20))         
//SYSPRINT DD SYSOUT=*                                                  
//SYSLIN   DD DSN=&LOADSET,DISP=(OLD,DELETE)                           
//         DD DDNAME=SYSIN                                              
//SYSIN    DD DUMMY               

关键修改说明

  • 合并了DB2预编译、CICS翻译和COBOL编译步骤,直接在COBOL编译器参数中添加CICS,SQL,让编译器直接处理两类语句
  • 在COBOL编译步骤的STEPLIB中加入CICS和DB2的LOAD库,确保编译器能识别CICS/DB2语法
  • 移除了单独的DB2预编译(PC)和CICS翻译(TRN)步骤,简化了编译流程

内容的提问来源于stack exchange,提问作者Hyppolite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 17:15:55