在JCL中,通常使用&创建符号参数。 (&符号)后跟变量名。
但是在数据集名称中,必须在变量名后面加上点符号。 例如:
//J&USER JOB 1
//MYSTEP EXEC PGM=MYPROG
//MYDATA DD DSN=&USER..MYCLASS.COOL
为什么会这样?我后来害怕不一致,所以我问这个问题。感谢您提前帮助。
答案 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个程序:FRED1
,FRED2
和FRED3
。你可以这样做:
//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只有一个句点,因为第一个
终止了符号名称,而不是结果的一部分。