索引付きファイル

KEY 句が指定されている場合には、比較に使用されるキー・データ項目はデータ名です。

KEY 句が指定されていない場合、ファイル位置標識は、RECORD KEY データ項目に入っている値と等しいキーを持つレコードに設定されます。

START ステートメントが正常に実行された場合には、データ名-1 の関連付 けられている RECORD KEY または ALTERNATE RECORD KEY が、後続の READ ステートメント の参照キーになります。

KEY 句が指定されている場合、比較に使用される検索引数はデータ名-1 であり、次のいずれかにすることができます。
注: RECORD KEY が COMP、COMP-3、COMP-4、または COMP-5 として定義されている場合、キー・データ項目は RECORD KEY そのものでなければなりません。 レコード域の部分キー・フィールドを使用することはできません。

ファイル位置標識は、ファイル内で比較を満たすレコード・キーを持つ、ある形式の最初のレコードに設定されます。 比較するオペランドの長さが同じでない場合には、 長い方のフィールドの右側が短いフィールドの長さに合わせて切り捨てられたかのように比較が実行されます。 PROGRAM COLLATING SEQUENCE 文節が指定されても無効になる点を除き、 他の数字比較および非数字比較のすべての規則が適用されます。

IBM Extension
RECORD KEY IS EXTERNALLY-DESCRIBED-KEY を指定したファイルの場合は、次のような追加の考慮事項が適用されます。
  • 予約語 EXTERNALLY-DESCRIBED-KEY を指定できます。 これは、レコード域内の完全なキーが比較に使用されなければならないことを示します。
  • 一連のデータ名を指定できます。 これによって、レコード域中の部分キー・フィールドが使用できます (総称 START)。 これらのデータ名は以下の規則に従わなければなりません。
    • 指定するデータ名のうち最後のもの以外はすべて、ファイルについてコピーされた単一の形式用のレコード・キーでなければなりません。 データ名が入っているレコード形式は、FORMAT 句によって指定できるものである必要はありません。
    • これらのデータ名 (キー・フィールド) の順序は、DDS で定義されているキーの順序と一致しなければなりません。 つまり、重要度の高いフィールドから順に指定しなければなりません。
    • データ名の総数は、そのレコード形式用に定義されたキー・フィールドの数を超えることはできません。
    • 一連のデータ名の最後のデータ名がレコード域内のキー・フィールドでない場合、 そのデータ名の左バイトは、その相対位置に定義されているキー・フィールドと同じスペースを占有しなければなりません。 レコード域内でこの位置にあるキー・フィールドが COMP、COMP-3、COMP-4、または COMP-5 フィールドである場合には、 キー・フィールドそのものだけがデータ名として使用可能です。
    • 最後のキーだけが参照変更することができ、参照変更開始位置は 1 と等しくなければなりません。
  • 表 1 は、KEY IS と FORMAT 句の間の処理を示しています。
表 1. KEY IS と FORMAT 句の関係
FORMAT 句の指定 KEY 句
一連のデータ名 省略 EXTERNALLY-DESCRIBED-KEY
Yes A、B C、D C、B
No A、E F、G F、E
検索引数は、指定されたデータ項目を使用して作成されます。
B
ファイル位置標識は、指定された形式をもち、KEY 句で指定された比較を満たすレコード・キーを持つ、 ファイル内の最初のレコードに設定されます。
C
検索引数は、FORMAT 句で指定された形式用のレコード域内のキー・フィールドを使用して作成されます。
D
ファイル位置標識は、指定された形式をもち、検索引数と等しいレコード・キーを持つ、ファイル内の最初のレコードに設定されます。
E
ファイル位置標識は、ファイルの共通キーをもち、KEY 句で指定された比較を満たす、 ファイル内の最初のレコードに設定されます。 共通キーがない場合、ファイル位置標識はファイル内の先頭レコードに設定されます。
F
検索引数は、ファイルについての最初のレコード形式 (プログラムで定義された) 用のレコード域のキー・フィールドを使用して作成されます。
G
ファイル位置標識は、ファイルの共通キーをもち、 検索引数と等しい、ファイル内の最初のレコードに設定されます。 共通キーがない場合、ファイル位置標識はファイル内の先頭レコードに設定されます。
End of IBM Extension
KEY 句が指定されていない場合には、EQUAL TO 比較に使用されるキー・データ項目は基本 RECORD KEY です。
データ名-1
次のいずれかにすることができます。
  • 基本 RECORD KEY
  • ファイルのレコード記述内の英数字データ項目で、 左端の文字位置がそのレコード・キーの左端の文字位置と対応しているもの。 これは修飾できます。 このデータ項目の長さは、このファイルのレコード・キーの長さと等しいか、 あるいはそれより小さくなければなりません。

ファイル位置標識は、比較を満たすキー・フィールドを持つ、ファイル内の最初のレコードに設定されます。 比較するオペランドの長さが同じでない場合には、 長い方のフィールドの右側が短いフィールドの長さに合わせて切り捨てられたかのように比較が実行されます。 PROGRAM COLLATING SEQUENCE 文節が指定されても無効になる点を除き、 他の数字比較および非数字比較のすべての規則が適用されます。

START ステートメントが正常に実行された場合には、 データ名-1 の関連付けられている RECORD KEY が、後続の READ ステートメントの参照キーになります。

START ステートメントの実行が失敗すると、参照キーが未定義になります。

IBM Extension

装置タイプ DATABASE の索引付きファイルの場合、 比較の意味は、ファイル用に定義されたレコード域内のキー・フィールドのタイプの影響を受けることがあります。 このシステムでのキー・フィールドは、複数フィールドとして定義することができ、それぞれのフィールドは昇順または降順にすることができます。 システムは、レコード・キーに入っている値と DDS 内で指定された形式と順序に基づいて、 レコードについての順序 (キー順アクセス・パス) を確立します。 START ステートメントが処理される際には、要求は次のように解釈されます。

COBOL 比較 システムの結果
GREATER THAN AFTER
NOT LESS THAN EQUAL TO または AFTER

例えば、GREATER THAN という比較を用いてステートメントが処理される場合は、START ステートメントによって指定された検索引数の後の最初のレコードを見つけるために、 順序付けられたレコードの検索が行われます。 ファイルが降順キーで順序付けられた場合、ファイル位置標識は、指定されたキーより小さく、 かつ、START ステートメントに指定されたキーよりも大きくないキーを持つレコードを指します。

End of IBM Extension