START(位置決め)文

START(位置決め)文は、相対ファイルまたは索引ファイルの中で、以降に検索するレコードに論理的に位置付ける。この文は順編成のファイルには適用できない。

START文は、同期または非同期でスレッドの実行を開始する。

一般形式

形式 1 (相対ファイル)

形式 2 (索引ファイル)

形式 3 (スレッド)

必須の比較文字 ">"、"<"、">="、"<="、"=" には下線を引いていないことに注意。これは、 ">" (以上)のような他の記号と混同することを避けるためである。

構文規則

すべての形式 (相対ファイルおよび索引ファイル)
  1. ファイル名-1は、相対ファイルまたは索引ファイルの名前にする。

  2. ファイル名-1は、順呼出し法または動的呼出し法のファイルの名前にする。

  3. データ名-1は修飾してもよい。

  4. ファイル名-1に適用できるUSE手続きを指定していないときは、INVALID KEY句を指定する。

    この規則は強制しない。

形式 1 (相対ファイル)
  1. KEY指定をする場合、データ名-1は対応するファイル管理記述項のRELATIVE KEYに指定したデータ項目とする。
形式 2 (索引ファイル)
  1. KEY指定をする場合、ファイル名-1のレコードキーとして指定したデータ項目を、データ名-1のデータ項目として使用できる。さらに、ファイル名-1のレコードキーとして指定したデータ項目の下位に属し、そのレコードキー・データ項目と左端の文字位置が同じで項類が英数字のデータ項目を、データ名-1のデータ項目として使用できる。

  2. 分割キー名-1のデータ項目には、ファイル名-1のレコードキーとして指定したデータ項目のいくつかを使用できる。

  3. WITH SIZE指定は、位置決め処理で使用するキー中の文字数を示す。

  4. WITH SIZE指定の対象とした場合、一意名-1は基本整数データ項目の名前とする。
形式 3 (スレッド)

  1. 定数-1 は、数字定数以外の定数でなければならず、表意定数であってはならない。

  2. 一意名-1 は、英数字データ項目として定義されなければならず、その値はCOBOLプログラム名とCOBOL以外のプログラム名のどちらでもよい。

  3. 一意名-3 は、USAGE POINTERまたはサイズが4バイトのデータ項目のいずれかとして定義しなければならない。この定義は、新しいスレッドに対するEXIT PROGRAM / STOP RUN文中のGIVING/RETURNING項目の定義により異なる。一意名-3は、USAGE POINTER項目として定義した場合は、関数一意名であってはならない。

  4. スレッドポインタ-1 は、USAGE THREAD-POINTERとして定義しなければならない。

  5. 一意名-4 は、4桁以上の長さの整数データ項目として定義しなければならない。

一般規則

すべての形式 (すべてのファイル)
  1. START文を実行するときには、ファイル名-1のファイルはINPUTモードまたはI-Oモードで開いておく。(手続き部 - MERGE - OPENの章のOPEN(開く)文節を参照。)

  2. KEY指定をしないと、比較演算IS EQUAL TOを暗黙的に指定したものとみなされる。

  3. START文を実行すると、ファイル名-1に対応するFILE STATUSデータ項目を指定してあれば、その値が更新される。(手続き部の章の入出力状態節を参照。)

  4. START文が、レコードロックを取得したり検出したり解除したりすることはない。
形式 1 (相対ファイル)
  1. KEY指定中の比較演算子によって表わされる比較は、ファイル名-1のファイル中のレコードのキー(下記の6項を参照)とデータ名-1との間で行われる。

    1. 比較演算子で、キーをデータ名-1と等しいか、より大きいか、以上と指定すると、

      ファイル中に現存する論理レコードのうちで、その比較条件を満足する最初のものにファイル位置指示子が位置付けられる。

    2. 比較演算子で、キーをデータ名-1より小さいか、以下と指定すると、ファイル中に現存する論理レコードのうちで、その比較条件を満足する最後のものにファイル位置指示子が位置付けられる。

    3. 比較条件を満たすレコードがファイル中に存在しないと、無効キー条件が発生する。この場合、START文の実行は不成功に終わり、ファイル位置指示子の内容はどうなるかわからない。(手続き部の章の無効キー条件節を参照。)

  2. 上記の5項の比較では、ファイル名-1のRELATIVE KEY句に指定したデータ項目が使用される。したがって、ファイル名-1にはRELATIVE KEY句を指定しておく。
形式 2 (索引ファイル)
  1. KEY指定中の比較演算子によって表わされる比較は、ファイル名-1のファイル中のレコードのキー(下記の8項を参照)とデータ名-1との間で行われる。ファイル名-1が索引ファイルであり、作用対象の大きさが等しくないと、短い方を超える長い方の右側の部分が切捨てられたように比較が進められる。文字の比較に関するその他の規則が、すべてこの比較に適用される。ただし、PROGRAM COLLATING SEQUENCE句は、この比較には効力をもたない。(手続き部の章の比較条件節の文字作用対象の比較を参照。)

    1. 比較演算子で、キーをデータ名-1と等しいか、より大きいか、以上と指定すると、

      ファイル中に現存する論理レコードのうちで、その比較条件を満足する最初のものにファイル位置指示子が位置付けられる。

    2. 比較演算子で、キーをデータ名-1より小さいか、以下と指定すると、ファイル中に現存する論理レコードのうちで、その比較条件を満足する最後のものにファイル位置指示子が位置付けられる。キーの値が重複するものが存在すると、そのうちの最後のものにファイル位置指示子が位置付けられる。

    3. 比較条件を満たすレコードがファイル中に存在しないと、無効キー条件が発生する。この場合、START文の実行は不成功に終わり、ファイル位置指示子の内容はどうなるかわからない。(手続き部の章の無効キー条件節を参照。)

  2. 上記の7項の比較においてKEY指定をした場合は、データ名のデータ項目(キー)が使用される。

  3. 上記の7項の比較においてKEY指定をしなかった場合は、ファイル名-1のRECORD KEY句に指定したデータ項目(キー)が使用される。

  4. START文の実行が正常に終了すると、下記のように参照キーが設定され、後続の形式 3のREAD文で使用できるようになる。 (手続き部 - PERFORM - ROLLBACKの章のREAD(読み込み)文節を参照。)

    1. KEY指定をしなかった場合は、ファイル名-1の主レコードキーが参照キーとなる。

    2. KEY指定をし、ファイル名-1のレコードキーとしてデータ名-1

      または分割キー名-1

      を指定した場合は、そのレコードキーが参照キーとなる。

    3. KEY指定をし、ファイル名-1のレコードキーとしてデータ名-1

      または分割キー名-1

      を指定しなかった場合は、データ名-1

      または分割キー名-1

      と左端の文字位置が同じであるレコードキーが参照キーとなる。

  5. START文の実行が不成功に終わったときは、参照キーはどうなっているかわからない。
形式 3 (スレッド)

  1. 定数-1、一意名-1、または手続きポインタ-1 は、翻訳単位でもっとも外部にあるプログラム名、プログラム中の入口点、または他の言語のラベルであるプログラム名を参照しなければならない。これが、新規作成されたスレッドの実行開始点となる。

  2. 一意名-2を指定した場合は、参照により渡される単一のパラメータが受け入れられるよう、新規作成されたスレッドの開始点を定義しなければならない。

  3. BY CONTENT指定を使用した場合は、一意名-2の内容が、システムにより割り当てられたスレッドセーフの作業領域にコピーされ、この作業領域への参照が新規作成されたスレッドの開始点に渡される。この作業領域は、作成したプログラムのデータ領域の有効期限にかかわらず、このスレッドの実行中は有効のままである。

  4. BY CONTENT指定を使用しない場合は、 一意名-2 への直接参照が新規作成されたスレッドの開始点に渡される。プログラマは、新規作成されたスレッドが参照する間、このデータ領域が確実に有効であるようにしておく必要がある。

  5. RETURNING指定を使用した場合は、新規作成されたスレッドが動作を完了し、一意名-3 の値を返し、制御をSTART文に戻す。

  6. IDENTIFIED BY指定を使用した場合は、新規作成されたスレッドの実行が開始され、新規作成されたスレッドを参照するハンドルがスレッドポインタ-1に配置され、 制御がSTART文に返される。ハンドルを使用して、WAIT文は戻り値を取得し、実行の同期を取り、スレッドの資源を解放する。このハンドルは、CBL_THREAD_登録集ルーチンで使用されるような有効なスレッドハンドルである。

  7. RETURNING指定もIDENTIFIED指定も使用しない場合は、新規作成されたスレッドの実行が開始され、制御がSTART文に返される。スレッドの資源はすべて、スレッドが終了したときに自動的に解放される。

  8. STATUS指定を使用した場合は、START文の実行により、CBL_THREAD_登録集ルーチンに対して指定された戻り符号のいずれかが、一意名-4中に配置される。

  9. START文が不成功に終わった場合、一意名-4が指定されていれば、CBL_THREAD_登録集ルーチンに対して指定された戻り符号のいずれかがその中に配置される。さらに、以下のいずれかが行われる。

    1. ON EXCEPTION指定を使用した場合は、制御が無条件文-1に渡される。その後、無条件文-1 で指定された各文の規則に従って、実行が続行される。 手続きの分岐、または制御の移動を明示的に指示する条件文が実行された場合は、制御が文の規則に従って渡される。そうでない場合は、無条件文-1 の実行が完了すると同時に、START文の最後に制御が渡され、NOT ON EXCEPTION指定が使用されていても無視される。

    2. 上記以外の場合で、NOT ON EXCEPTION指定またはSTATUS指定を使用した場合は、START文の最後に制御が渡され、NOT ON EXCEPTION指定が使用されていても無視される。

    3. 上記以外の場合、実行単位は実行時エラーとともに終了する。

  10. START文が正常に実行された場合は、以下が記載された順序通りに行われる。

    1. STATUS指定を使用した場合は、ZEROが一意名-4に転記される。

    2. NOT ON EXCEPTION指定を使用した場合は、制御が無条件文-2に渡される。 その後、無条件文-2 で指定された各文の規則に従って、実行が続行される。手続きの分岐、または制御の移動を明示的に指示する条件文が実行された場合は、制御が文の規則に従って渡される。そうでない場合は、無条件文-2 の実行が完了すると同時に、START文の最後に制御が渡され、ON EXCEPTION指定が使用されていても無視される。