有効な検索引数
プログラム記述ファイルの場合には、検索引数は単一フィールドでなければな りません。 CHAIN および DELETE 命令の場合には、検索引数は、索引付きファイルの ファイル仕様書で定義したキー・フィールドと同じ長さでなければなりません。 その他のファイル命令の場合には、検索引数は部分フィールドとすることがで きます。
DDS は、使用するフィールドをキー・フィールドとして指定します。 ファイル仕様書の KEYLOC キーワードは、最初のキー・フィールドの開始桁を 指定します。 ファイル仕様書の 29 ~ 33 桁目の項目は、DDS に定義されるキーの長さを指定 しなければなりません。
図 1 および 図 2 は、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 命令の検索引数として使用されます。