我想指定文件的ddname" ABC.DEF.XXX"其中XXX是用户通过jin中的sysin给出的输入。如何实现?
答案 0 :(得分:6)
请理解......之间存在很大差异。
这是三件非常不同的事情。我们中的一些人在StackOverflow上回答问题时会有一些生活经历让我们对于在没有提及您的商店允许的内容或正在解决的实际业务需求的情况下回答技术上可行的问题保持沉默。
大型机已经存在了半个多世纪,许多商店都有技术问题的标准解决方案。有时候解决方案不会这样做,而这就是我们做的事情。"违背技术人员的建议或商店标准是职业限制。
您建议的一个潜在意想不到的后果是,JCL扫描无法找到对ABC.DEF.XXX
的访问。这可能会给那些进行影响分析的人带来悲痛。
那就是说,你的问题有两个解决方案可以理解为什么是技术上可能的"类别。
您可以编写汇编程序子程序以使用SVC99
,也称为DYNALLOC
,这是z / OS上的动态分配例程。文档很多,请参阅IBM Knowledge Center for z / OS并查看z / OS MVS - > z / OS MVS编程:授权汇编服务 - >动态分配。
您可以构造参数来调用C运行时例程dynalloc()
来动态分配文件。
请注意,在任何一种情况下,解决方案都应包含强大而灵活的错误处理。
通常,一个不动态分配DD名称,并且必须在运行时分配的DSN是使用符号参数完成的。
答案 1 :(得分:0)
您可以检查& SYSUID。符号可在您的商店使用。如果是这样,当您指定AAA.BBB时,它将扩展为提交用户的ID。& SYSUID。
有些商店也会传播其他符号,有些商店不会允许任何符号,这实际上只是取决于。
答案 2 :(得分:0)
为了完整起见,执行此操作的方式略有不同,不涉及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,将数据集名称更改为您喜欢的任何名称。这是两全其美的 - 你可以做你想做的事情,系统可以在你的工作开始之前解决任何资源冲突。
对于OPEN TYPE = J有一些授权要求,对于初学者来说当然不是这样,但如果您感兴趣,那么所有这些都需要记录。任何尝试这个的人肯定会在这个过程中学到很多关于z / OS的知识!