Cobol 在jcl中由用户分配DDName

Cobol 在jcl中由用户分配DDName,cobol,jcl,Cobol,Jcl,我想指定文件“ABC.DEF.XXX”的ddname,其中XXX是用户通过jcl中的sysin提供的输入。如何实现它?请理解 什么是技术上可能的 你的商店允许什么 根据您的需求,什么样的解决方案能够提供健壮且可维护的解决方案 这是三件截然不同的事情。我们中的一些人在StackOverflow上回答问题时都有自己的生活经历,这使得我们在回答关于技术上可行的问题时保持沉默,而没有提及您的店铺允许什么,或者正在解决的实际业务需求是什么 大型机已经存在了半个多世纪,许多商店都有解决技术问题的标准解决

我想指定文件“ABC.DEF.XXX”的ddname,其中XXX是用户通过jcl中的sysin提供的输入。如何实现它?

请理解

  • 什么是技术上可能的
  • 你的商店允许什么
  • 根据您的需求,什么样的解决方案能够提供健壮且可维护的解决方案
这是三件截然不同的事情。我们中的一些人在StackOverflow上回答问题时都有自己的生活经历,这使得我们在回答关于技术上可行的问题时保持沉默,而没有提及您的店铺允许什么,或者正在解决的实际业务需求是什么

大型机已经存在了半个多世纪,许多商店都有解决技术问题的标准解决方案。有时候,解决方案是“不要这样做,这就是我们要做的。”违背技术人员的建议,或者你的商店标准,是职业生涯的限制

您建议的一个潜在的意外后果是,JCL扫描将找不到对
ABC.DEF.XXX
的访问。这可能会让那些进行影响分析的人感到悲伤

也就是说,我想到了两种解决问题的方法,它们属于“技术上可行的”范畴

  • 您可以编写一个汇编子程序来使用
    SVC99
    ,也称为
    DYNALLOC
    ,这是z/OS上的动态分配例程。文档非常丰富,请参阅IBM z/OS知识中心,并查看z/OS MVS->z/OS MVS编程:授权汇编服务->动态分配

  • 您可以构造参数来调用C运行时例程
    dynalloc()
    ,以动态分配文件

  • 请注意,在任何一种情况下,解决方案都应该包括健壮和灵活的错误处理


    通常不会动态分配DD名称,必须在运行时分配的DSN是通过符号参数完成的。

    请理解

    • 什么是技术上可能的
    • 你的商店允许什么
    • 根据您的需求,什么样的解决方案能够提供健壮且可维护的解决方案
    这是三件截然不同的事情。我们中的一些人在StackOverflow上回答问题时都有自己的生活经历,这使得我们在回答关于技术上可行的问题时保持沉默,而没有提及您的店铺允许什么,或者正在解决的实际业务需求是什么

    大型机已经存在了半个多世纪,许多商店都有解决技术问题的标准解决方案。有时候解决办法是“不要这样做,我们做的是我们做的。”违背技术人员的建议,或者你的商店标准,是职业限制

    您建议的一个潜在的意外后果是,JCL扫描将找不到对
    ABC.DEF.XXX
    的访问。这可能会让那些进行影响分析的人感到悲伤

    也就是说,我想到了两种解决问题的方法,它们属于“技术上可行的”范畴

  • 您可以编写一个汇编子程序来使用
    SVC99
    ,也称为
    DYNALLOC
    ,这是z/OS上的动态分配例程。文档非常丰富,请参阅IBM z/OS知识中心,并查看z/OS MVS->z/OS MVS编程:授权汇编服务->动态分配

  • 您可以构造参数来调用C运行时例程
    dynalloc()
    ,以动态分配文件

  • 请注意,在任何一种情况下,解决方案都应该包括健壮和灵活的错误处理


    通常不动态分配DD名称,必须在运行时分配的DSN通过符号参数完成。

    您可以检查&SYSUID。符号可在您的商店使用。如果是这样,当您指定AAA.BBB.&SYSUID时,它将扩展为提交用户的ID


    有些商店也会传播其他符号,有些则不允许,这取决于具体情况。

    您可以检查&SYSUID。符号可在您的商店使用。如果是这样,当您指定AAA.BBB.&SYSUID时,它将扩展为提交用户的ID


    有些商店也会传播其他符号,有些则不允许,这取决于具体情况。

    为了完整性,有一种稍微不同的方法,不涉及DYNALLOC(SVC 99)

    DYNALLOC的缺点是,您的作业可能会等待资源一段时间,从而在解决冲突时占用资源(例如批处理启动器)。例如,如果您需要的数据集或卷无法立即使用,则可能会无限期地等待,具体取决于您对DYNALLOC的编码方式

    如果您只需要更改数据集的名称,有时可以使用RDJFCB和OPEN TYPE=J进行更改。JFCB(作业文件控制块)是z/OS如何知道已分配的数据集的…DSN和数据集标签中的大部分信息存储在其中。RDJFCB宏使您能够访问JFCB,然后OPEN TYPE=J为您提供了修改系统构建的JFCB的方法—例如,将数据集名称更改为您计算的内容,而不是JCL中的内容

    实现这一点的一种常见方法是只使用一个包含基本分配数据的DD语句——它甚至不需要DSN(如果您不在JCL中指定DSN,系统将为您创建一个临时DSN)。您的程序使用OPEN TYPE=J修改JFCB,将数据集名称更改为您喜欢的任何名称。这是两个世界中最好的一种——你可以做你想做的事情,系统可以在你的工作开始之前解决任何资源冲突