レコードまたはファイルに有効なキー

キー順アクセス・パスの場合には、レコード様式のキー・フィールドとして使用するために、 DDS に 1 つまたは複数のフィールドを定義することができます。ファイル内のすべてのレコード・タイプが同じキー・フィールドをもつ必要は ありません。 例えば、受注見出しレコードで ORDER フィールドをキー・フィールドとして 定義し、受注明細レコードで ORDER および LINE フィールドをキー・フィールド として定義することができます。

ファイルのキーは、そのファイル内のレコード・タイプに有効なキーに よって決まります。 ファイルのキーは次のようにして決まります。

ILE RPG プログラムでは、あるファイル命令コードに検索引数を指定して、処理したいレコードを識別することができます。ILE RPG プログラムはこの検索引数とファイルまたはレコードのキーを比較し、検索引数と一致したキーのレコードに対して指定命令を処理します。

有効な検索引数

ファイル名やレコード名を指定する ILE RPG 命令である CHAIN、DELETE、 READE、READPE、SETGT、および SETLL に、検索引数を指定することができます。

ファイル名に対する命令の場合、検索引数に指定できるフィールドの最大 数は、ファイルのキーとして有効なキー・フィールドの合計数です。例えば、ファイルのすべてのレコード・タイプに同じキー・フィールドが入 っていない場合には、キー・リスト (KLIST) を使用して、ファイルのすべての レコード・タイプに共通のフィールドの数だけからなる検索引数を指定するこ とができます。ファイルに 3 つのレコード・タイプがあり、キー・フィールドが次 のとおり定義されていたとします。

-  REC1 にはキー・フィールド A があります。
-  REC2 にはキー・フィールド A および B があります。
-  REC3 にはキー・フィールド A、B、および C があります。

すべてのレコード・タイプに共通のキー・フィールドはフィールド A のみで あるため、検索引数はフィールド A と同じ属性だけをもつ単一フィールドとしかなれません。

注:
ヌル可能キー・フィールドは、ALWNULL(*YES) または ALWNULL(*INPUTONLY) と共に使用できません。

レコード名に対する命令の場合には、検索引数に指定できるフィールドの 最大数は、そのレコード・タイプのキーとして有効なキー・フィールドの 合計数と同じです。

検索引数が 1 つ以上のフィールドから成り立つ場合は、 表意定数 KLIST、および自由形式演算では式のリスト (小括弧で囲む) または %KDS を指定することができます。 単一のフィールドからなる検索引数の場合には、上記に加えて、リテラルまたは変数名も指定できます。

ヌル値キーを処理するには、以下のいずれかを行います。

後の 2 つのケースでは、検索引数に対する %NULLIND() の現在の値が検索に使用されます。

検索引数の各フィールドの属性は、 ファイルまたはレコード・キー内の対応するフィールドの属性と同じでなければなりません。 属性には長さ、データ・タイプ、および小数部分の桁数があります。 属性は、コンパイラー・リストのキー・フィールド情報データ・テーブルに リストされます。キー・フィールド情報の例を参照してください。自由形式演算 の入出力操作で使用されるリストまたは %KDS の検索引数で必要になるのは、型の一致のみです。 長さおよび形式は、ファイル内で定義されているキーと異なっても構いません。

これらすべてのファイル命令 (CHAIN、DELETE、READE、READPE、SETGT、およ び SETLL) の中では、ファイルまたはレコードに有効なフィールドの合計数より も少ないフィールドで検索引数を指定することもできます。 このような 検索引数は部分キーと呼びます。

部分キーの参照

部分キーを指定する場合は、 KFLD 指定の数が少ない KLIST を使用することができます。 自由形式演算では、キーの数を示す 2 つ目のパラメーターがある %KDS、 または必要なキーをすべて持つ式のリストも使用できます。 例えば、ファイルにキーが 3 つあるのに、そのうちの 2 つしか指定する必要がない場合は、 次のいずれの方法でも部分キーを指定することができます。

DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ 
D keys            DS                  LIKEREC(rec : *KEY)
CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq
C     klist2        KLIST
C                   KFLD                    k1
C                   KFLD                    k2
 /free
        CHAIN klist2 rec;                // KLIST with two KFLD entries
        CHAIN %KDS(keys : 2) rec;        // %KDS with two keys
        CHAIN (name : %char(id_no)) rec; // a list of two expressions

部分キーを参照する検索引数の指定規則は次のとおりです。

検索引数で部分キーを参照した場合には、ファイルは検索引数を満たす最初 のレコードに位置付けられるか、あるいは検索引数を満たす最初のレコードが 検索されるレコードです。 例えば、SETGT および SETLL 命令では、その命令および検索引数を満たす アクセス・パス上の最初のレコードにファイルが位置付けられます。 CHAIN 命令では、検索引数を満たすアクセス・パス上の最初のレコードが検索 されます。DELETE 命令では、検索引数を満たすアクセス・パス上の最初のレコードが削除 されます。 READE 命令では、アクセス・パス上のそのレコード (指定したタイプの レコード) のキーの一部が検索引数を満たす場合に、その次のレコードが検索 されます。 READPE 命令では、アクセス・パス上のそのレコード (指定したタイプの レコード) のキーの一部が検索引数を満たす場合に、その前のレコードが検索 されます。 上に述べた命令コードについて詳しくは 、「WebSphere Development Studio: ILE RPG 言語解説書」を参照してください。