Syncsort - 将 UNPAIRED 记录写入 SORTOUT 文件,将 PAIRED 记录写入 PAIRED 文件

Syncsort - Write UNPAIRED records to SORTOUT file, and PAIRED records to PAIRED file

我可以使用以下方法将未配对的记录保存到 SORTOUT(这就是我想要的):

//SORT     EXEC PGM=SORT,PARM='DYNALLOC=(SYSDA,255)'
//SORTMSGS DD SYSOUT=*
//SORTJNF1 DD DSN=FILE1,
//            DISP=OLD,DCB=BUFNO=255
//SORTJNF2 DD DSN=FILE2,
//            DISP=OLD,DCB=BUFNO=255
//SORTOUT  DD DSN=FILEOUT,
//            DISP=(NEW,CATLG,DELETE),
//            UNIT=(SYSDA,59),
//            SPACE=(CYL,(500,100),RLSE)
//SYSIN    DD *
SORT FIELDS=COPY
JOINKEYS FILE=F1,FIELDS=(25,4,A,115,20,A,135,4,A,140,4,A,5,20,A)
JOINKEYS FILE=F2,FIELDS=(5,4,A,9,20,A,29,4,A,33,4,A,37,20,A)
JOIN UNPAIRED,F2,ONLY

但我需要将 PAIRED 记录保存到单独的文件中。我尝试了以下语句,但 PAIRED 记录没有保存在我的 PAIRED 文件中:

//SORT     EXEC PGM=SORT,PARM='DYNALLOC=(SYSDA,255)'
//SORTMSGS DD SYSOUT=*
//SORTJNF1 DD DSN=FILE.F1,
//            DISP=OLD,DCB=BUFNO=255
//SORTJNF2 DD DSN=FILE.F2,
//            DISP=OLD,DCB=BUFNO=255
//SORTOUT  DD DSN=FILE.SORTOUT,
//            DISP=(NEW,CATLG,DELETE),
//            UNIT=(SYSDA,59),
//            SPACE=(CYL,(500,100),RLSE)
//PAIRED   DD DSN=FILE.PAIRED,
//            DISP=(NEW,CATLG,DELETE),
//            UNIT=(SYSDA,59),
//            SPACE=(CYL,(500,100),RLSE)
//SYSIN    DD *
SORT FIELDS=COPY
JOINKEYS FILE=F1,FIELDS=(25,4,A,115,20,A,135,4,A,140,4,A,5,20,A)
JOINKEYS FILE=F2,FIELDS=(5,4,A,9,20,A,29,4,A,33,4,A,37,20,A)
JOIN UNPAIRED,F2,ONLY
OUTFIL FNAMES=SORTOUT
OUTFIL FNAMES=PAIRED,SAVE

编辑 1: OP 提到(在此答案的评论部分),“我只想在我的主要 SORTOUT 数据集中保留未配对的记录(仅限 F2),以及我的 PAIRED 数据集中的 PAIRED 记录(仅限 F2)。”配对记录意味着 F1 和 F2。 OP 基本上是在寻找 RIGHT JOIN。下面提供的 SORT 语句是根据 OP 的要求进行编辑的。请注意,除非指定了带有 ONLY 操作数的 JOIN 语句,否则需要 REFORMAT 语句。

您必须使用 Syncsort 中的方法(在 dfsort 中称为 indicator 方法),才能实现您的期望。请参阅下面的 SORT 语句。

SORT FIELDS=COPY
JOINKEYS FILE=F1,FIELDS=(25,4,A,115,20,A,135,4,A,140,4,A,5,20,A)
JOINKEYS FILE=F2,FIELDS=(5,4,A,9,20,A,29,4,A,33,4,A,37,20,A)
REFORMAT FIELDS=(F1:p,l,F2:p,l,?)
JOIN UNPAIRED,F2
OUTFIL FNAMES=BOTH,INCLUDE=(53,1,CH,EQ,C'B'),BUILD=(Build the columns you need from F1/F2)                          
OUTFIL FNAMES=UNPAIRED,INCLUDE=(53,1,CH,EQ,C'2'),BUILD=(Build the columns you need from F2)

其中,

p - 位置值表示字段的第一个字节相对于输入记录的开头。

l - 长度值表示字段的长度。

观察 REFORMAT FIELDS 语句中的 ?

Syncsort 对 z/OS 程序员指南的引用:

?

This symbol is used to place a one-byte indicator in the reformatted record that indicates whether the reformatted record is a paired or an unpaired joined record. The indicator will be set to one of three different printable values:

“B” if the reformatted record is a paired record

“1” if the reformatted record is an unpaired record created from the F1 file

“2” if the reformatted record is an unpaired record created from the F2 file

更多详情:

希望对您有所帮助!