数据集中的符号参数名称为JCL

时间:2012-02-20 16:56:39

标签: dataset jcl

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

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

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

为什么会这样?我后来害怕不一致,所以我问这个问题。感谢您提前帮助。

2 个答案:

答案 0 :(得分:4)

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

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

是正确的

This discussion表示第一个句点用于连接,而另一些句子表示它是符号变量终止的一部分。但这并不重要。第二个句点成为数据集名称的一部分。

实施例

如果& USER 解析为 USR01 ,则会将其解释为

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

您的数据集中仅使用第二个句号。

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

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

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

答案 1 :(得分:4)

正如符号参数的开头标有&符号(&)。它可以被终止 空间或时期。当一段时间终止时,该期间不是名称的一部分(就像开头一样) &符号不是。)

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

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

此处&MYPROG已替换为其值FRED。没有问题找出符号名称开始或结束的位置。 现在假设您要运行3个程序:FRED1FRED2FRED3。你可以这样做:

  //RUN3 EXEC PGM=&MYPROG.3

此处正在运行程序FRED3。符号MYPROG以句点结尾并等同于FRED 文本的其余部分添加了FRED3

在数据集名称中使用符号参数时也适用。第一个期间需要终止 符号名称,下一个句点是数据集名称本身的一部分。例如,如果符号USER的计算结果为 ABC123,然后

  //MYDSN DD DSN=&USER..MYDATA

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

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

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