COBOL2002 言語 拡張仕様編


4.4.2 START文(索引ファイル機能の拡張)

形式

書き方1

[図データ]

書き方2

[図データ]

機能

レコードを順アクセスするために,ファイルを論理的に位置づけ,アクセス順序を決定する。

構文規則
  1. ファイル名1は,順アクセス法または動的アクセス法の索引ファイルの名前でなければならない。

  2. データ名1は,修飾してもよい。

    合成キー名1は,ファイル名で修飾できる。

  3. ファイル名1に関連するUSE手続きがないときは,INVALID KEY指定を書かなければならない。

  4. KEY指定を書くとき,データ名1は次のどれかでなければならない。

    (a)ファイル名1に関連する主レコードキーまたは副レコードキーとして指定されたデータ項目。

    (b)ファイルのレコード中の項類が英数字または数字のデータ項目で,ファイル名1に関連する主レコードキーまたは副レコードキーと左端の文字位置を共有し,そのレコードキーの長さより大きくないもの。ただし,この数字項目のデータ属性およびレコード中での相対位置はファイルを生成したときのものと同じでなければならない。

  5. 合成キー名1は,SOURCE指定,または=指定のあるRECORD KEY句,SOURCE指定,FOR指定,または=指定のあるALTERNATE RECORD KEY句に書かれた合成キー名を指定する。

  6. データ名1は,部分参照してはならない。

一般規則
  1. ファイル名1のファイルは,START文を実行する前に入力モードまたは入出力両用モードで開いておかなければならない。

  2. KEY指定を書かないと,比較演算子「IS EQUAL TO」が指定されたものとみなす。

  3. START文の実行によって,レコード領域の内容は変わらないし,ファイル名1に関連するRECORD句のDEPENDING ON指定で書かれたデータ名のデータ項目の内容も変わらない。

  4. KEY指定の比較演算子で指定された比較は,ファイル名1のファイルのレコードに関連するキーと,一般規則5で指定されるデータ項目との間で比較される。つまり,そのファイルの文字の照合順序に従って,昇順に並んでいる参照キーについて比較される。作用対象の長さが異なる場合,短い方と同じ長さになるように長い方の右側を切り捨てて文字比較をする。

    (a)ファイル位置指示子は,キーの値が比較条件を満たす最初のレコードの位置に設定される。

    (b)ファイル中のどのレコードに対しても比較条件が満たされない場合,無効キー条件になり,START文の実行はできない。

  5. 一般規則4による比較では,次のデータ項目が使用される。

    (a)KEY指定を書くと,データ名1または合成キー名1で参照されるデータ項目。

    (b)KEY指定を書かないと,RECORD KEY句に書かれたデータ項目。

  6. START文の実行によって,ファイル名1に関連する入出力状態の値が更新される。

  7. START文の実行の成功または不成功による制御の移行は,START文のINVALID KEYおよびNOT INVALID KEY指定の有無による。

  8. START文を実行できなくなると,ファイル位置指示子は有効な次のレコードがないことを示すように設定される。参照キーは規定しない。

  9. END-STARTは,START文の範囲を区切る。

  10. 参照キーは,次のとおりに定める。

    (a)KEY指定を書かないと,ファイル名1に対して指定した主レコードキーが参照キーになる。

    (b)KEY指定を書き,データ名1または合成キー名1がファイル名1のレコードキーである場合,そのレコードキーが参照キーになる。

    (c)KEY指定を書き,データ名1がファイル名1のレコードキーでない場合,データ名1のデータ項目と左端の文字位置を共有するレコードキーが参照キーになる。この参照キーが,START文の位置決めに使用される(一般規則4参照)。START文を実行すると,この参照キーは後続の順アクセスのREAD文にも使用される。

  11. 重複した副レコードキー値を持つレコードがあるときは,その中で論理的に先頭(レコード下降順アクセスのときは最後)にあるレコードに位置づける。

  12. 比較演算子「EQUAL TO」または「=」を指定した場合,ファイル位置指示子はデータ名1の値と等しいキーを持つレコードキーに位置づける。これ以後のレコードは,キーの昇順にアクセスされる。

  13. 比較演算子「GREATER THAN」または「>」を指定した場合,ファイル位置指示子はデータ名1の値より次に大きいキーを持つレコードに位置づけられる。これ以後のレコードは,キーの上昇順にアクセスされる。

  14. 比較演算子「NOT LESS THAN」「NOT <」を指定した場合,ファイル位置指示子はデータ名1の値と等しいキーを持つレコードに位置づける。等しいキーがなければ,次に大きいキーを持つレコードに位置づける。

    これ以後のレコードは,キーの上昇順にアクセスされる。

  15. 比較演算子「LESS THAN」または「<」を指定した場合,ファイル位置指示子はデータ名1の値より次に小さいキーを持つレコードに位置づける。

    これ以後のレコードは,キーの下降順にアクセスされる。

  16. 比較演算子「LESS THAN OR EQUAL TO」または「<=」を指定した場合,ファイル位置指示子はデータ名1の値と等しいキーを持つレコードに位置づける。等しいキーがなければ,次に小さいキーを持つレコードに位置づける。

    これ以後のレコードは,キーの下降順にアクセスされる。

  17. 比較演算子「GREATER THAN OR EQUAL TO」または「>=」を指定した場合,ファイル位置指示子はデータ名1の値と等しいキーを持つレコードに位置づける。等しいキーがなければ,次に大きいキーを持つレコードに位置づける。

    これ以後のレコードは,キーの上昇順にアクセスされる。

  18. 書き方2のSTART文でLAST RECORDを指定した場合,ファイル位置指示子は最大のキーを持つレコードに位置づける。

    これ以後のレコードは,キーの下降順にアクセスされる。

    このとき,データ名1の内容は比較の対象にならない。

  19. 書き方2のSTART文でFIRST RECORDを指定した場合,ファイル位置指示子は最小のキーを持つレコードに位置づける。これ以後のレコードは,キーの上昇順にアクセスされる。

    このとき,データ名1の内容は比較の対象にならない。

【標準仕様との関連】

COBOL2002 言語 標準仕様編」 「10.8.45 START文