2017-04-24 38 views
0

我有两个GDG文件(-1 & 0版本)。使用这两个文件需要生成一个平面文件,其中包含插入记录(不在-1版本中但在+0版本中的记录),删除记录(在-1版本中但不在+0版本中的记录)和更新记录(两个版本中的记录,但是+0版本的记录可能在某些字段中有变化)。我怎样才能得到这些更新记录?如果可以,我可以使用Joinkeys吗?使用连接键排序不匹配的记录

注:此更新可以从第1列是文件的最后一列(+0版本的GDG)的

+0

什么是RECFM和LRECL?什么是关键? –

+0

RECFM = FB,LRECL = 227,关键=(04,80) – Maxcc0

回答

4

这是一个简单的JOINKEYS任何地方:

OPTION COPY 
    JOINKEYS F1=INA,FIELDS=(4,80),SORTED,NOSEQCK 
    JOINKEYS F2=INB,FIELDS=(4,80),SORTED,NOSEQCK 
    JOIN UNPAIRED 
    REFORMAT FIELDS=(F1:1,227,F2:1,227,?) 

OPTION COPY是主要任务,生成加入文件后运行的位。 SORT FIELDS=COPY相当于OPTION COPY。

假设您的数据已经按键排序。如果没有,请删除SORTED,NOSEQCK,但请记住,通过相同的密钥,您可能会得到“虚假”匹配,而不是相对于插入和删除文件中的相同位置。

JOIN UPAIRED给你匹配和两种类型的不匹配。 JOIN UNPAIRED,F1,F2是等同的。

REFORMAT语句定义了连接文件上的记录。你想要从/两个记录中得到所有的数据,并且你想知道是否有匹配,如果不匹配,哪个输入文件有记录。这就是问号(?)是什么。它将包含'B'(在两个文件上),'1'(在F1上,或仅在第一个物理存在的JOINKEYS)或'2'(在另一个JOINKEYS文件上)。

然后您需要输出数据。我假设你想在不同的地方的数据:

OUTFIL FNAMES=INSERT, 
     INCLUDE=(455,1,CH,EQ,C'1'), 
     BUILD=(1,227) 
    OUTFIL FNAMES=DELETE, 
     INCLUDE=(455,1,CH,EQ,C'2'), 
     BUILD=(228,227) 
    OUTFIL FNAMES=CHANGE, 
     INCLUDE=(455,1,CH,EQ,C'B', 
       AND, 
        1,227,CH,NE,228,227,CH), 
     BUILD=(1,454) 
    OUTFIL FNAMES=UNCHNGE, 
     SAVE, 
     BUILD=(1,227) 

INCLUDE=(或OMIT=)包括或从“OUTFIL集团”忽略的数据。 OUTFILs“同时运行”(如同样的记录依次呈现给每个记录,然后是下一个记录等)。

FNAMES为您提供了放入JCL的DDname。

对于CHANGE,INCLUDE是针对第一条记录(已知因'B'测试而匹配)不等于第二条记录。目前还不完全清楚你想在这里输出什么。目前,这些输出为F2附加到F1,和整个(两倍大小)记录写入。你也可以用“对”(BUILD =(1,227,/,228,227))或只是其中一个记录来写记录。

SAVE是说:“如果这个记录一直没有出现任何OUTFIL的事情,在这里输出。这是测试当然是有用的,即使你不希望它在决赛中的代码。

+0

非常感谢。解决方案完美:) – Maxcc0

+0

我有一个小问题。如果记录长度是超过256,如何比较它在OUTFIL FNAMES = CHANG,E INCLUDE条件? – Maxcc0

+0

您将不得不使用AND并在多个部分进行测试,如(1,256,CH,EQ,501,256,AND,257,244,CH,EQ,757,244 )如果每次比较的长度为500. –

相关问题