2017-04-24 62 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. –

相關問題