JCL 在一行中合并记录

Posted

技术标签:

【中文标题】JCL 在一行中合并记录【英文标题】:JCL Combine records in one line 【发布时间】:2021-04-21 13:24:33 【问题描述】:

我有 4 个数据集,每个数据集只有一个包含两位数的记录。例如:

File1: 45
File2: 78
File3: 83
File4: 52

我希望将数据合并到一个新的数据集中 这样:

4578
8352

如何在 Mainframe-JCL 中编写代码?

【问题讨论】:

JCL 用于在后台启动程序(又名 Batch)。您不能使用 JCL 操作数据;你需要为此运行一个程序。您商店的排序实用程序(DFSort、SyncSort...)可以做到这一点。 【参考方案1】:

要完成此任务,请将您的四个输入文件连接到 sortin:

//STEP1  EXEC PGM=SORT
//SORTIN DD DSN=File1,DISP=SHR
//       DD DSN=File2,DISP=SHR
//       DD DSN=File3,DISP=SHR
//       DD DSN=File4,DISP=SHR
//SORTOUT DD DSN=Combined
//SYSIN DD *
* Combine each pair of records into a single record
 SORT FIELDS=COPY
* Append a sequence number 00,50,00,50,00,...
 INREC BUILD=(1,2,2X,SEQNUM,2,ZD,START=0,INCR=50)
* Reformat the output record depending on the sequence number
 OUTREC IFTHEN=(WHEN=GROUP,BEGIN=(5,2,CH,EQ,C'00'),
  PUSH=(7:1,2)),
  IFTHEN=(WHEN=GROUP,BEGIN=(5,2,CH,EQ,C'50'),
  PUSH=(9:1,2))
* Include only the second record of each group (the 50 records)
 OUTFIL FILES=OUT,INCLUDE=(5,2,CH,EQ,C'50'),BUILD=(7,4)
 END

对于四个输入文件:

文件1:

45

文件2:

78

文件3:

83

文件4:

52

组合输出文件应为:

4578
8352

这已通过适用于 Windows v14r3 的 AHLSORT 进行了验证,但应该适用于 z/OS 上的 DFSORT 或 SYNCSORT。

【讨论】:

以上是关于JCL 在一行中合并记录的主要内容,如果未能解决你的问题,请参考以下文章

sqlServer 多行合并为一行

Oracle 多行记录合并

将具有相同 id 的行合并为一行,保留所有数据

git初识

git初识

利用Oracle分析函数实现多行数据合并为一行