複数ファイル処理で突き合わせフィールドを使用した場合には、突き合わせフィールド の内容に応じて、処理するレコードがプログラムによって選択されます。 最初のサイクルの始めでは、プログラムがすべての 1 次/2 次 入力ファイルから 1 つずつレコードを読み取って、レコード内の突き合わせフィール ドを比較します。 レコードが昇順であれば、突き合わせフィールドが最低のレコード がプログラムによって選択されます。 レコードが降順であれば、プログラムは最高の突き合わせフィール ドのレコードを選択します。
レコードがファイルから選択されると、プログラムはそのファイルから次のレ コードを読み取ります。 次のプログラム・サイクルの始めに、新しいレコードが 選択されるのを待機している読み取り域内の他のレコードと比較され、1 つのレコ ードが処理のために選択されます。
突き合わせフィールドのないレコードもファイルに含めることができます。 このよ うなレコードは、突き合わせフィールドのあるレコードより前に、処理のために選択 されます。 比較されているレコードの中に突き合わせフィールドのないレコードが 2 つ以上あっ た場合には、それらのレコードが入っていたファイルの優先順位によって選択さ れるレコードが決まります。 ファイルの優先順位は次のとおりです。
1 次ファイルのレコードが 1 つまたは複数の 2 次レコー ドと一致した場合には、MR (突き合わせレコード) 標識がオンに設定されます。 MR 標識は、一致したレコードの明細時処理から、そのレコードに続く合計時まで 、オンのままです。 この標識を使用して、選択されたレコードに対する演算または 出力命令を条件付 けすることができます。 一致したレコードを 1 つ選択する必要があった場合には、それらの レコードが入 っていたファイルの優先順位によって選択されるレコードが決まります。
図 7 は、複数ファイル処理の論理フローを示しています。
1 つの入力ファイルだけに突き合わせフィールドがあるように定義し、他の入力フ ァイルには突き合わせフィールドがないようなプログラムを作成することができます。 突き合わせフィールドのないファイルは、前述のファイルの優先順位に完全に従って 処理されます。 突き合わせフィールドのあるファイルは最後に処理され、そのファイ ルについては順序検査が行われます。
入力仕様書の 65 から 66 桁目で突き合わせフィールド値 (M1 から M9) をフィールドに割 り当てる場合には、以下の点を考慮してください。
図 41 は、 突き合わせフィールドの指定方法の例です。
*...1....+....2....+....3....+....4....+....5....+....6....+....7... FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords++++++++++++++++++++++++++++ * The files in this example are externally described (E in position * 22) and are to be processed by keys (K in position 34). FMASTER IP E K DISK FWEEKLY IS E K DISK *...1....+....2....+....3....+....4....+....5....+....6....+....7... IRcdname+++....Ri........................................................ I..............Ext-field+..................Field+++++++++L1M1..PlMnZr.... * MASTER FILE IEMPMAS 01 I EMPLNO M1 I DIVSON M3 I DEPT M2 IDEPTMS 02 I EMPLNO M1 I DEPT M2 I DIVSON M3 * WEEKLY FILE IWEEKRC 03 I EMPLNO M1 I DIVSON M3 I DEPT M2
レコードの突き合わせに 3 つのファイルが使用されます。 すべてのファイルに 3 つ の突き合わせフィールドが指定され、突き合わせるべきフィールドを指示するために 、すべて同じ値 (M1、M2、M3) を使用しています。 MR 標識がオンに設定される のは、EMPMAS か DEPTMS のいずれかのファイルの 3 つのすべてのフィールドが、 WEEKRC ファイルからの 3 つのすべてのフィールドと同じである場合だけです。
各ファイル中の 3 つの突き合わせフィールドは結合され、次のように降順で編成さ れた 1 つの突き合わせフィールドとして取り扱われます。
突き合わせフィールドが入力仕様書に指定された順序は、各突き合わせフィールドの編 成には影響しません。
*...1....+....2....+....3....+....4....+....5....+....6....+....7... IFilename++SqNORiPos1+NCCPos2+NCCPos3+NCC................................ I........................Fmt+SPFrom+To+++DcField+++++++++L1M1FrPlMnZr.... IDISK AB 01 1 C1 I OR 02 1 C2 I OR 03 1 C3 I 1 10 0EMPNO M1 I 11 15 0DUMMY M2 I 11 15 0DEPT M202 I 16 20 0DEPT M203
入力ファイル には、3 つの異なるレコード・タイプがあります。 この 3 つのす べての 1 から 10 桁目に突き合わせフィールドが入っています。 それらの 2 つには、2 番 目の突き合わせフィールドがあります。 M1 はすべてのレコード・タイプにあるので、 67 から 68 桁目にフィールドとレコードの関連を記入せずに指定することができます。 フィールドとレコードの関連を記入せずに 1 つの突き合わせ値 (M1 から M9) を指定する 場合には、すべての突き合わせ値を、一度は、フィールドとレコードの関連を記入せずに 指定しなければなりません。 M1 の値はフィールドとレコードの関連なしに指定さ れているので、M2 の値も一度はフィールドとレコードの関連なしに指定されてい なければなりません。 M2 フィールドはすべてのレコード・タイプにあるわけでは ないので、ダミーの M2 フィールドを次に指定することが必要です。 ダミー・フ ィールドには任意の固有名を与えることができますが、指定された長さは、実際 の M2 フィールドの長さと等しくなければなりません。 次に、フィールドとレコ ードの関連の指定によって M2 フィールドが見付かったレコード・タイプに、そ の M2 フィールドが関連付けられます。
*...1....+....2....+....3....+....4....+....5....+....6....+....7... FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords++++++++++++++++++++++++++++ FPRIMARY IPEA F 64 DISK FFIRSTSEC IS A F 64 DISK FSECSEC IS A F 64 DISK *...1....+....2....+....3....+....4....+....5....+....6....+....7... IFilename++SqNORiPos1+NCCPos2+NCCPos3+NCC................................ I........................Fmt+SPFrom+To+++DcField+++++++++L1M1FrPlMnZr.... IPRIMARY AA 01 1 CP 2NC I 2 3 MATCH M1 * I BB 02 1 CP 2 C I 2 3 NOM * IFIRSTSEC AB 03 1 CS 2NC I 2 3 MATCH M1 * I BC 04 1 CS 2 C I 2 3 NOM * ISECSEC AC 05 1 CT 2NC I 2 3 MATCH M1 * I BD 06 1 CT 2 C I 2 3 NOM
2 つ以上のファイルのレコードの突き合わせは、以下の方法で処理されます。
図 44 および 図 45 は、3 つのファイルから レコードがどのように処理のために選択されるかを示しています。
上記の 3 つのディスク・ファイルのレコードは太字で示した順序で選択されます。
サイクル | 処理されるファイル | オンになる標識 | 標識が設定される理由 |
---|---|---|---|
1 | 1 次 | 02 | 突き合わせフィールドの指定がない |
2 | 1 次 | 02 | 突き合わせフィールドの指定がない |
3 | 最初の 2 次 | 04 | 突き合わせフィールドの指定がない |
4 | 2 番目の 2 次 | 05 | 2 番目の 2 次が低く、1 次と一致しない |
5 | 1 次 | 01、MR | 1 次が最初の 2 次と一致する |
6 | 1 次 | 01、MR | 1 次が最初の 2 次と一致する |
7 | 最初の 2 次 | 03、MR | 最初の 2 次が 1 次と一致する |
8 | 最初の 2 次 | 03 | 最初の 2 次が低く、1 次と一致しない |
9 | 最初の 2 次 | 03 | 最初の 2 次が低く、1 次と一致しない |
10 | 2 番目の 2 次 | 05 | 2 番目の 2 次が低く、1 次と一致しない |
11 | 1 次 | 01 | 1 次が低く、2 次と一致しない |
12 | 1 次 | 01、MR | 1 次が 2 番目の 2 次と一致する |
13 | 1 次 | 02 | 突き合わせフィールドの指定がない |
14 | 2 番目の 2 次 | 05、MR | 2 番目の 2 次が 1 次と一致する |
15 | 2 番目の 2 次 | 05、MR | 2 番目の 2 次が 1 次と一致する |
16 | 2 番目の 2 次 | 06 | 突き合わせフィールドの指定がない |
17 | 1 次 | 01、MR | 1 次が両方の 2 次ファイルと一致する |
18 | 最初の 2 次 | 03、MR | 最初の 2 次が 1 次と一致する |
19 | 最初の 2 次 | 04 | 突き合わせフィールドの指定がない |
20 | 2 番目の 2 次 | 05、MR | 2 番目の 2 次が 1 次と一致する |
21 | 最初の 2 次 | 03 | 最初の 2 次が低く、1 次と一致しない |
22 | 1 次 | 01、MR | 1 次が両方の 2 次ファイルと一致する |
23 | 最初の 2 次 | 03、MR | 最初の 2 次が 1 次と一致する |
24 | 最初の 2 次 | 02、MR | 最初の 2 次が 1 次と一致する |
25 | 2 番目の 2 次 | 05、MR | 2 番目の 2 次が 1 次と一致する |
26 | 2 番目の 2 次 | 05、MR | 2 番目の 2 次が 1 次と一致する |
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.