inline/instream JCL 代码的续行

Line continuation for inline/instream JCL code

如果JCL只允许写入1到72列的代码,如何在BIND MEMBER中添加更多的成员(ABC6PROG,ABC0PROG...)?我需要至少放8个成员在这里。

//SYSTSIN  DD *                                                        
  DSN SYSTEM(DB9G)                                                     
  BIND MEMBER (ABC6PROG,ABC0PROG,ABC1PROG,ABC2PROG,ABC3PROG,ABC4PROG) -
  PLAN        (DSNTIA91) -                                             
  LIBRARY     ('DSN910.DB9G.DBRMLIB.DATA') -                           
  ACTION      (REP) -                                                  
  ISOLATION   (CS) -                                                   
  VALIDATE    (BIND) -                                                 
  RELEASE     (COMMIT) -                                               
  OWNER       (IBMUSER) -                                              
  QUALIFIER   (IBMUSER) -                                              
  ENCODING    (EBCDIC) -                                               
  REOPT       (VARS)                                                   
  END                                                                  
/*    

SYSTSIN 数据不受与 JCL 相同的限制,并遵循 TSO 命令语法规则。

DB2 BIND 语句在逻辑上是一行相当长的行,“-”表示同一行的延续。

您应该能够将 MEMBER 参数分布在多行中。

只需在 ABC4PROG 成员后添加一个逗号和破折号,然后在下一行继续。

此数据是 sysin 数据,或流内数据,即作为 JCL 的一部分提交的数据。因此,行的长度受您提交的 JCL 流的记录长度限制。

虽然JCL的记录长度通常是80字节,但也可以更长。您只是不能通过 TSO 的 SUBMIT 提交此类 JCL。不相信吗?试试这个:

  1. 分配一个顺序数据集,RECFM=VB,LRECL=254,说DSN=userid.DATAVB.PS

  2. 在该数据集中存储以下数据。添加符合您的安装要求的 JOB 语句。

    //jobname  JOB ...
    //ST01     EXEC PGM=IEBGENER                                                                                                                            
    //SYSPRINT DD   SYSOUT=*                                                                                                                                
    //SYSIN    DD   DUMMY                                                                                                                                   
    //SYSUT1   DD   *                                                                                                                                       
    This is record 1, stored in a RECFM=VB, LRECL=254 data set, that has some data up to that position 250. (Remember 4 bytes are used to save the RDW. ==>¦
    This is record 2, stored in a RECFM=VB, LRECL=254 data set, that has some data up to that position 250. (Remember 4 bytes are used to save the RDW. ==>¦
    This is record 3, stored in a RECFM=VB, LRECL=254 data set, that has some data up to that position 250. (Remember 4 bytes are used to save the RDW. ==>¦
    This is record 4, stored in a RECFM=VB, LRECL=254 data set, that has some data up to that position 250. (Remember 4 bytes are used to save the RDW. ==>¦
    /*                                                                                                                                                      
    //SYSUT2   DD   SYSOUT=*
    
    

注意原来的post,最后一行末尾有3个反引号。那是一个错字。语句以 SYSOUT=*

结尾
  1. 分配另一个顺序数据集,RECFM=FB,LRECL=80,DSN=userid.DATAFB.PS

  2. 在该数据集中存储以下数据。添加符合您的安装要求的 JOB 语句。

    //jobbname JOB ... 
    //ST01     EXEC PGM=IEBGENER                             
    //SYSPRINT DD   SYSOUT=*                                 
    //SYSIN    DD   DUMMY                                    
    //SYSUT1   DD   DISP=SHR,DSN=userid.DATAVB.PS  
    //SYSUT2   DD   SYSOUT=(A,INTRDR)
    

注意原来的post,最后一行末尾有3个反引号。那是一个错字。语句以 SYSOUT=(A,INTRDR)

结尾
  1. 现在提交数据集userid.DATAFB.PS

第一个作业通过内部 reader (INTRDR) 提交第二个作业。查看第二个作业的输出。您应该会看到五个 250 字节的记录。所以流内数据和 JCL 语句实际上是 250 字节的记录。

现在,回到最初的问题。您在 SYSTSIN 数据中拥有的是 one TSO 命令(DSN ...)和带参数的 DSN 子命令。第一个子命令启动 DSN 程序,然后它将读取 ist 命令,从 BIND 开始...

TSO 允许在行中的任何位置拆分 SYSTSIN 中的数据,方法是在行中写入 space 后跟减号 (-) 或加号 (+) 作为最后一个字符。 TSO 将在处理完整语句之前合并这些行。 TSO 删除第一行中以加号或减号开头的任何内容。使用加号,TSO 将删除下一行的前导 space,使用减号,它将数据保留为原样。延续可以跨越几行。

由 TSO 合并后的行必须遵守读取该数据(在本例中为 DSN)的程序的要求。

最后,JCL 语句可以在位置 3 和 71 之间包含关键字和操作数,包括。位置 1 和 2 是 // 用于 JCL。如果位置 1 和 2 是 not //,那么这不是 JCL 语句。位置 72 它是 JCL 延续指示符,可选,在继续文字数据(apostrophes 中的数据)时触发。你永远不应该在位置 72 编码一个非空白字符(从而避免继续文字数据。)在使用 JCL 超过 35 年的时间里,我从来没有在位置 72 编码一个非空白字符。