Syncsort-将未配对的记录写入SORTOUT文件,并将配对的记录写入PAIRED文件

时间:2018-11-22 18:56:47

标签: syncsort

我可以使用以下方法将UNPAIRED记录保存到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 个答案:

答案 0 :(得分:1)

编辑1: OP在此答案的注释部分中提到:“我只想将UNPAIRED记录(仅F2)保留在我的主SORTOUT数据集中,而PAIRED记录(我的PAIRED数据集中)。”配对记录表示F1和F2。 OP基本上是在寻找RIGHT JOIN。下面提供的SORT语句根据OP的要求进行编辑。请注意,除非指定了带有REFORMAT操作数的JOIN语句,否则必须使用ONLY语句。

您必须使用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 for z / OS程序员指南的报价:

  

     

此符号用于在重新格式化的格式中放置一个字节指示符   记录,指示重新格式化的记录是成对记录还是   未配对的加盟记录。指示器将设置为三个之一   不同的可打印值:

     

如果重新格式化的记录是成对的,则为“ B”   记录

     

如果重新格式化的记录是创建的未配对记录,则为“ 1”   从F1文件

     

如果重新格式化的记录是未配对的记录,则为“ 2”   从F2文件创建

更多详细信息:

希望这会有所帮助!