用于运行COBOL程序调用子程序的JCL

用于运行COBOL程序调用子程序的JCL,cobol,mainframe,jcl,Cobol,Mainframe,Jcl,我有一个COBOL pgm A调用另一个COBOL pgm B。 在pgm B中,我需要一个文件。如何编写JCL以便能够在pgm B中访问此文件?我已经在B中为此文件编写了select子句和FD条目。对于执行程序a的步骤,必须在JCL中包含a 如果文件存在,那就很容易了 //ABCDEFGH DD DISP=SHR,DSN=your.file.name.here 其中ABCDEFGH是您在程序B的SELECT语句中使用的名称 如果要创建新文件,必须考虑文件将使用的估计空间以及要放置文件的位置

我有一个COBOL pgm A调用另一个COBOL pgm B。 在pgm B中,我需要一个文件。如何编写JCL以便能够在pgm B中访问此文件?我已经在B中为此文件编写了select子句和FD条目。

对于执行程序a的步骤,必须在JCL中包含a

如果文件存在,那就很容易了

//ABCDEFGH DD DISP=SHR,DSN=your.file.name.here
其中ABCDEFGH是您在程序B的SELECT语句中使用的名称

如果要创建新文件,必须考虑文件将使用的估计空间以及要放置文件的位置

//ABCDEFGH DD DISP=(NEW,CATLG,DELETE),
//            DSN=your.file.name.here,
//            AVGREC=K,
//            RECFM=FB,
//            LRECL=your-lrecl-here,
//            MGMTCLAS=your-management-class-here,
//            SPACE=(your-lrecl-here,(primary-number-of-records,secondary),RLSE)
这只是徒手画,你真的应该看看和

  • 在步骤中包括DD语句
  • 程序B甚至不必是COBOL
  • 理想的设计是使程序B成为一个服务程序——根据需要打开、关闭、读取、写入或重新写入 请求和你的需求。如果这种封装是预期的,它将使您的生活更加轻松

  • 我看到过这样的情况:B是汇编程序,在不以交互方式运行时定期刷新磁盘写入,但在调试时立即写入

    从JCL的角度来看,程序
    A
    处理文件还是程序
    B
    处理文件并不重要,因为它们都是在同一个步骤中执行的。我创建了JCL…还更新了我的主pgm和子pgm,为此文件添加了相同的select子句,并在FD部分将此文件声明为外部文件。我测试了我的JCL。它工作得很好。非常感谢:)您不需要为“刷新”更改程序,只需将DD更改为unblocked(假设程序中没有硬编码阻塞)。我一点也不确定这会给你带来什么好处,但你会这么做的。不涉及代码。好处在于调试。诸如Expeditor或Intertest之类的产品表示。从历史上看,生产缓冲确实带来了性能提升。可能是在转移注意力。我试图展示子模块的完整“服务”性质。通常,这样大量的文件处理都是在顶层执行的。好吧,一个调试工具,你必须修改程序的行为才能使用它,在任何情况下,在我看来都不像什么cop。我相信他们可以显示缓冲区,但我们开始了。至少有一个解释。