索引付きファイル

索引付きファイルは、そのアクセス・パスがキーの値によって作成される プログラム記述 DISK ファイルです。 データ記述仕様書を使用して、索引付きファイルのアクセス・パスを作 成しなければなりません。

索引付きファイルは、ファイル仕様書の 35 桁目の I によって識別されます。

キー・フィールドは、索引付きファイル中のレコードを指定します。 ファイル仕様書では、 キー・フィールドの長さを 29 〜 33 桁目、キー・フィールドの形式を 34 桁目、キー・フィールドの 開始位置を KEYLOC キーワードで 指定します。

索引付きファイルはキーによる順次処理、限界内順次処理、または キーによるランダム処理ができます。

有効な検索引数

プログラム記述ファイルの場合には、検索引数は単一フィールドでなければな りません。 CHAIN および DELETE 命令の場合には、検索引数は、索引付きファイルの ファイル仕様書で定義したキー・フィールドと同じ長さでなければなりません。 その他のファイル命令の場合には、検索引数は部分フィールドとすることがで きます。

DDS は、使用するフィールドをキー・フィールドとして指定します。 ファイル仕様書の KEYLOC キーワードは、最初のキー・フィールドの開始桁を 指定します。 ファイル仕様書の 29 〜 33 桁目の項目は、DDS に定義されるキーの長さを指定 しなければなりません。

図 162 および 図 163 は、DDS を使って索引付きファイルのアクセス・パスを どのように記述するかを示しています。

図 162. DDS およびそれに対応するファイル仕様書の RPG IV 例外 / エラー処理の詳細な流れ
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ..*
A..........T.Name++++++.Len++TDpB......Functions++++++++++++++++++++*
A          R FORMATA                   PFILE(ORDDTLP)
A                                      TEXT('Access Path for Indexed +
A                                      File')
A            FLDA          14
A            ORDER          5  0
A            FLDB         101
A          K ORDER
A*
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... *
FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords+++++++++++++++++++++++++++++
FORDDTLL   IP   F  118     3PIDISK    KEYLOC(15)
F*

プログラム記述索引付きファイルのアクセス・パスを作成するには、 データ記述仕様書を使用しなければなりません。

論理ファイル ORDDTLL のレコード様式 FORMATA の DDS には、 5 桁の長さのフィールド ORDER がキー・フィールドとして定義され、パックさ れた形式になっています。 キー・フィールドとしての ORDER の定義は、このファイルのキー順アクセスを 確立します。 その他の 2 つのフィールド FLDA と FLDB は、このレコードの残りの桁が文字 フィールドとして記述されています。

プログラム記述入力ファイル ORDDTLL は、ファイル仕様書に索引付きファイル として記述されています。 29 〜 33 桁目には、DDS で定義したキー・フィールドに必要なレコード内の桁数 (3 桁) を指定しなければなりません。 KEYLOC キーワードは、レコード内のキー・フィールドの開始桁として 15 桁目 を指定しています。 ファイルが 22 桁目の F によってプログラム記述として定義されているので、ILE RPG コンパイラーはコンパイル時にファイルの外部フィールド・レベル記述を取り出しません。 したがって、入力仕様書にレコード中のフィールドを記述しなければなりませ ん。

図 163. (1/2) データ記述仕様書を使用した索引付きファイルのアクセス・パス (複合キー) の定義
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ..*
A..........T.Name++++++.Len++TDpB......Functions++++++++++++++++++++*
A          R FORMAT                    PFILE(ORDDTLP)
A                                      TEXT('Access Path for Indexed +
A                                      File')
A            FLDA          14
A            ORDER          5
A            ITEM           5
A            FLDB          96
A          K ORDER
A          K ITEM

この例では、データ記述仕様書が論理ファイル ORDDTLL のレコード様式 FORMAT の 2 つのキー・フィールドを定義します。 プログラム記述索引付きファイルの複合キーとして 2 つのフィールドを使用す る場合には、そのキー・フィールドはレコード内で隣接していなければなりま せん。

ファイル仕様書では、キー・フィールドの長さが 29 〜 33 桁目に 10 (ORDER お よび ITEM フィールドに必要な結合桁数) として指定されています。 キー・フィールドの開始桁は、キーワード KEYLOC (44 桁目から) を使用して 15 として記述されています。開始桁は、最初のキー・フィールドの最初の桁を指定しなければなりません。

図 164. (2/2) データ記述仕様書を使用して定義する索引付きファイルのアクセス・パス (複合キー)
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... *
FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords+++++++++++++++++++++++++++++
FORDDTLL   IP   F  120    10AIDISK    KEYLOC(15)
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... *
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
DKEY         DS
D K1                      1      5
D K2                      6     10
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... *
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
C                   MOVE      ORDER         K1
C                   MOVE      ITEM          K2
C     KEY           CHAIN     ORDDTLL                            99

DDS で複合キーを指定した場合には、ファイルとの CHAIN をするために プログラム中で検索引数を作成しなければなりません。 (プログラム記述ファイルの場合には、KLIST を 使用することができません。) 1 つの方法は、DDS で定義したキー・フィールドと等しいサブフィールドをも ったデータ構造 (定義仕様書を使用して) を作成することです。 次に演算において、サブフィールドをキー・フィールドの値と等しく設定し て、データ構造名を CHAIN 命令の検索引数として使用します。

この例では、MOVE 命令はサブフィールド K1 および K2 をそれぞれ ORDER および ITEM の値と同じに設定します。 次にデータ構造名 (KEY) が CHAIN 命令の検索引数として使用されます。