索引付きファイルは、そのアクセス・パスがキーの値によって作成される プログラム記述 DISK ファイルです。 データ記述仕様書を使用して、索引付きファイルのアクセス・パスを作 成しなければなりません。
索引付きファイルは、ファイル仕様書の 35 桁目の I によって識別されます。
キー・フィールドは、索引付きファイル中のレコードを指定します。 ファイル仕様書では、 キー・フィールドの長さを 29 〜 33 桁目、キー・フィールドの形式を 34 桁目、キー・フィールドの 開始位置を KEYLOC キーワードで 指定します。
索引付きファイルはキーによる順次処理、限界内順次処理、または キーによるランダム処理ができます。
プログラム記述ファイルの場合には、検索引数は単一フィールドでなければな りません。 CHAIN および DELETE 命令の場合には、検索引数は、索引付きファイルの ファイル仕様書で定義したキー・フィールドと同じ長さでなければなりません。 その他のファイル命令の場合には、検索引数は部分フィールドとすることがで きます。
DDS は、使用するフィールドをキー・フィールドとして指定します。 ファイル仕様書の KEYLOC キーワードは、最初のキー・フィールドの開始桁を 指定します。 ファイル仕様書の 29 〜 33 桁目の項目は、DDS に定義されるキーの長さを指定 しなければなりません。
図 162 および 図 163 は、DDS を使って索引付きファイルのアクセス・パスを どのように記述するかを示しています。
*.. 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 コンパイラーはコンパイル時にファイルの外部フィールド・レベル記述を取り出しません。 したがって、入力仕様書にレコード中のフィールドを記述しなければなりませ ん。
*.. 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 として記述されています。開始桁は、最初のキー・フィールドの最初の桁を指定しなければなりません。
*.. 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 命令の検索引数として使用されます。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.