3

在 JCL 中,通常使用 &(& 符号)后跟变量名来创建符号参数。

但是在数据集名称中,它必须在变量名称后面加上点号。例子:

//J&USER JOB 1
//MYSTEP EXEC PGM=MYPROG
//MYDATA DD DSN=&USER..MYCLASS.COOL

为什么呢?怕以后不一致,所以才问这个问题。感谢您提前提供任何帮助。

4

2 回答 2

4

就像符号参数的开头用 & 符号标记一样。它可以由空格或句点终止。当以句点结尾时,句点不是名称的一部分(就像开头的&符号不是)。

当整个字符串被符号参数替换时,它只是按原样编码:

  // SET MYPROG=FRED
  //RUNIT EXEC PGM=&MYPROG

这里&MYPROG被替换为它的值,FRED。确定符号名称的开始或结束位置没有问题。现在假设您要运行 3 个程序FRED1FRED2FRED3. 您可以执行以下操作:

  //RUN3 EXEC PGM=&MYPROG.3

在这里,程序FRED3正在运行。符号MYPROG以句点结尾,等于FRED,文本的其余部分被添加到此FRED3

在数据集名称中使用符号参数时同样适用。第一个句点用于终止符号名称,下一个句点是数据集名称本身的一部分。例如,如果 symbolUSER的计算结果为 ABC123,则

  //MYDSN DD DSN=&USER..MYDATA

评估ABC123.MYDATA为数据集名称。相似地,

  //MYDSN DD DSN=&USER.X.MYDATA

计算结果为:ABC123X.MYDATA请注意,生成的 DSN 有一个句点,因为第一个句点终止了符号名称并且不是结果的一部分。

于 2012-02-20T17:32:51.963 回答
4

简单来说,如果一个符号参数后跟一个句点 (.),则需要添加一个额外的句点 (.),从而产生 2 个句点 (.)。

根据您的情况,您必须使用两个句点 (.) 是正确的。

这个讨论说第一个句点用于连接,而其他一些人说它是符号变量终止的一部分。但这并不重要。第二个句点成为数据集名称的一部分。

例子:

如果&USER解析为USR01,那么它将被解释为

//JUSR01 JOB 1
//MYSTEP EXEC PGM=MYPROG
//MYDATA DD DSN=USR01.MYCLASS.COOL

您的数据集中只会使用第二个周期。

但是,想象一下如果你有这样的事情,会发生什么

//MYDATA DD DSN=&USER.MYCLASS.COOL

数据集类似于USR01MYCLASS.COOL。这是一个错误,因为每个级别不应超过 8 个字符。

于 2012-02-20T17:31:09.563 回答