0

我有两个 GDG 文件(-1 和 0 版本)。使用这两个文件需要生成一个平面文件,该文件将包含插入记录(不在-1版本但在+0版本的记录),删除记录(在-1版本但不在+0版本的记录) 和更新记录(两个版本中的记录,但 +0 版本的某些字段可能有更改)。我怎样才能得到那些更新记录?我可以使用 Joinkeys 来做到这一点,如果可以,如何?

注意:更新可以是从第 1 列到文件最后一列的任何位置(GDG 的+0 版本)

4

1 回答 1

5

这是一个简单的 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,NOSEQCKs 但请记住,您可能会通过与插入和删除相关的文件中不同位置的相等键获得“虚假”匹配。

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 Group”的数据。OUTFILs 同时“运行”(因为同一记录依次呈现给每个记录,然后是下一条记录,等等)。

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

对于 CHANGE,INCLUDE 是针对不等于第二个的第一个记录(已知由于对“B”的测试而匹配)。目前尚不清楚您想要什么输出。目前,这些作为附加到 F1 的 F2 输出,并写入整个(两倍大小)记录。您还可以将记录写成“对”(BUILD=(1,227,/,228,227))或只写一个或另一个记录。

SAVE 的意思是“如果这条记录没有出现在任何 OUTFIL 上,请在此处输出。它对于测试当然很有用,即使您不希望它出现在最终代码中。

于 2017-04-24T20:38:13.047 回答