突き合わせフィールド値 (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....+....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 つのすべてのフィールドと同じである場合だけです。
- DIVSON
- M3
- DEPT
- M2
- EMPLNO
- M1
突き合わせフィールドが入力仕様に指定された順序は、各突き合わせフィールドの編 成には影響しません。
*...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