突き合わせフィールド値 (M1 から M9) の割り当て

入力仕様の 65 から 66 桁目で突き合わせフィールド値 (M1 から M9) をフィールドに割 り当てる場合には、以下の点を考慮してください。
  • 突き合わせフィールド の指定があるすべてのレコード・タイプについて順序検査 が実行されます。 すべての突き合わせフィールドは、すべて昇順か降順の同じ順序で なければなりません。 M1 から M9 の割り当てられたフィールドの内容が正しい順序であるかどうかが検査さ れます。 順序にエラーがあった場合には、RPG IV 例外/エラー処理ルーチンが 制御を受け取ることになります。 プログラムの処理が続行される場合には、同じファイルから 次のレコードが読み 取られます。
  • プログラムで使用されるすべてのファイルに突き合わせフィールドが必要なわけ ではありません。 また、1 つのファイルの中ですべてのレコード・タイプ に突き合わせ フィールドが必要なわけでもありません。 しかし、ファイルの突き合わせが行わ れることになっている場合には、2 つのファイルからの少なくとも 1 つのレコー ド・タイプに突き合わせフィールドがなければなりません。
  • 突き合わせに使用されるすべてのレコード・タイプに同じ突き合わせフィールド値を 指定しなければなりません。 図 1を参照してください。
  • 同じ突き合わせフィールド値 (M1 から M9) を持つ日付、時刻、およびタイム・スタンプ 突き合わせフィールドは、同じタイプ (例えば、すべて日付) でなければなりませ んが、形式は異なっていても差し支えありません。
  • 同じ突き合わせフィールド値 (M1 から M9) を持つすべての文字、図形、または数値 突き合わせフィールドは、同じ長さおよびタイプでなければなりません。 突き合わせフィールド にパック形式のデータが入っている場合には、突き合わせフィール ドの長さとしてゾーン 10 進数の長さ (2 X パックされた長さ - 1) が使用 されます。 桁数が同じであれば、1 つのレコードのパック形式フィールドを別のレコードの ゾーン 10 進数フィールドと突き合わせることも有効です。 パック形式フィールドの長さは常に 奇数であるため、この長さは常に奇数でなけ ればなりません。
  • 異なる突き合わせフィールドのレコード位置はオーバーラップしていてもかまい ませんが、すべてのフィールドの合計長が 256 文字を超えていてはなりません。
  • 1 つのレコード・タイプに複数の突き合わせフィールドが指定された場合には、 すべてのフィールドが結合されて、1 つの連続したフィールドとして取り扱われ ます (図 1 を参照)。 フィールドは、突き合わせフィールド値の降順 (M9 から M1) に従って結合されます。
  • 突き合わせフィールド値を 1 つのレコードの中で繰り返すことはできません。
  • 突き合わせフィールドが 1 つでも数値として記述されていた場合には、 同じ突き合わ せフィールド値 (M1 から M9) が与えられたすべての突き合わせフィールドは数値と見なされます。
  • 小数点以下の桁数がある数値フィールドが突き合わされる場合には、その小 数点以下の桁数はないものとして取り扱われます。 例えば、3.46 は 346 と等 しいと見なされます。
  • 数値突き合わせフィールドでは、数字部分だけが比較されます。 負のフィールド であっても、数値フィールドの符号は無視されるので、正と見なされます。 した がって、-5 は +5 と一致します。
  • 日付および時刻フィールドは、比較の前に *ISO 形式に変換されます。
  • 図形データは、16 進数値によって比較されます。
  • 複数の突き合わせフィールドが使用された場合には、MR 標識がオンに設定され る前に、常にすべての突き合わせフィールドが一致していることが必要です。 例えば、突き合わせフィールド値 M1、M2、および M3 が指定された場合には、 1 次レコードからのこれら 3 つのすべてのフィールドが、2 次 レコードからの 3 つの突き合わせフィールドのすべてと一致していなければなりません。 M1 および M2 フィールドによって指定されたフィールドだけが一致しても、 MR 標識はオンに設定されません (図 1 を参照)。
  • UCS-2 フィールドは、突き合わせフィールドとして使用できません。
  • 突き合わせフィールドを先読みフィールドおよび配列に使用することはできません。
  • レコードの突き合わせ操作では、フィールド名は無視されます。 したがって、同 じ突き合わせレベルが割り当てられている異なるレコード・タイプからのフィールド は、同じ名前であっても差し支えありません。
  • プログラムに代替照合順序またはファイル変換が定義された場合には、文字 フィールドの突き合わせは指定された代替順序に従って行われます。
  • ヌル値可能フィールド、ALTSEQ(*NONE) によって定義された文字フィールド、 および 2 進数、浮動、整数、ならびに符号なし (入力仕様 の 36 桁目 B、F、I、または U) には突き合わせフィールド値を 割り当ていることはできません。
  • フィールドとレコードの関連標識がない突き合わせフィールドは、その標識があ る突き合わせフィールドより前に記述する必要があります。フィールドとレコードの 関連標識を突き合わせフィールドと併用する場合には、フィールドとレコードの関連 標識がこのファイルのレコード識別標識と同じでなければならず、突き合わせフィー ルドはフィールドとレコードの関連標識に従ってグループ化されていなければな りません。
  • フィールド・レコードの関連標識がないフィールドについて 突き合わせ値 (M1 から M9) を指定する場合には、使用するすべての突き合わせ値を、一度は、フィールドと レコードの関連標識を使用せずに指定しなければなりません。すべての突き合わせフィールドが すべてのレコードに共通していない場合には、ダミ ー突き合わせフィールドを使用することが必要です。 外部記述ファイルの場合には、フィールド とレコードの関連標識は無効です (図 2 を参照してください)。
  • 突き合わせフィールドは、制御レベル標識 (L1 から L9) からは独立しています。
  • 複数ファイル処理が指定されていても、LR 標識がオンに設定された場合に は、プログラムは複数ファイル処理ルーチンを回避します。

図 1 は、 突き合わせフィールドの指定方法の例です。

図 1. 値がすべて一致する突き合わせフィールド
*...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 つの突き合わせフィールドとして取り扱われます。
DIVSON
M3
DEPT
M2
EMPLNO
M1

突き合わせフィールドが入力仕様に指定された順序は、各突き合わせフィールドの編 成には影響しません。

図 2. ダミー M2 フィールドによる突き合わせフィールド
*...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
この図は、ダミーの M2 フィールドを含む突き合わせフィールドを示しています。

入力ファイル には、3 つの異なるレコード・タイプがあります。 この 3 つのす べての 1 から 10 桁目に突き合わせフィールドが入っています。 それらの 2 つには、2 番 目の突き合わせフィールドがあります。 M1 はすべてのレコード・タイプにあるので、 67 から 68 桁目にフィールドとレコードの関連を記入せずに指定することができます。 フィールドとレコードの関連を記入せずに 1 つの突き合わせ値 (M1 から M9) を指定する 場合には、すべての突き合わせ値を、一度は、フィールドとレコードの関連を記入せずに 指定しなければなりません。 M1 の値はフィールドとレコードの関連なしに指定さ れているので、M2 の値も一度はフィールドとレコードの関連なしに指定されてい なければなりません。 M2 フィールドはすべてのレコード・タイプにあるわけでは ないので、ダミーの M2 フィールドを次に指定することが必要です。 ダミー・フ ィールドには任意の固有名を与えることができますが、指定された長さは、実際 の M2 フィールドの長さと等しくなければなりません。 次に、フィールドとレコ ードの関連の指定によって M2 フィールドが見付かったレコード・タイプに、そ の M2 フィールドが関連付けられます。

図 3. 3 つのディスク・ファイルの突き合わせフィールドの指定
*...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