MERGE 文

MERGE 文は、指定したキーのセットで複数の同一順編成ファイルを結合し、その処理中に出力手続きまたは出力ファイルがレコードを併合順で利用できるようにする。

一般形式


MERGE

指令

  1. 予約語リストのフラグ設定および修正を行うコンパイラ指令に加えて、以下の指令が、本セクションに記載の構文または意味内容に影響を与える可能性がある。
    • CALLSORT"EXTSM" - USING または GIVING 句に最大 128 個のファイルを指定できる。この指令を指定しない場合、ファイル名は 10 個に制限される。

構文規則

  1. file-name-1 は、データ部の整列併合ファイル記述項に記述する。
  2. procedure-name-1 は、出力手続きの名前を表す。
  3. procedure-name-1 および procedure-name-2 は、節名とする。

    ANS85OSVS 現在、この制限は廃止されている。

  4. ANS85 file-name-1 が参照するファイルに可変長レコードが含まれている場合、file-name-2 および file-name-3 が参照するファイルに含まれるレコードのサイズは、file-name-1 に記述した最小のレコード以上かつ最大のレコード以下とする。file-name-1 が参照するファイルに固定長レコードが含まれている場合、file-name-2 および file-name-3 が参照するファイルに含まれるレコードのサイズは、file-name-1 に記述した最大のレコード以下とする。
  5. file-name-2、file-name-3、および file-name-4 は、データ部の中の整列併合ファイル記述項ではなく、ファイル記述項に記述する。
  6. THRU および THROUGH は同等である。
  7. data-name-1 は KEY のデータ名であり、以下の規則に従う。
    1. KEY データ名が示すデータ項目は、file-name-1 に関連付けたレコード内に記述する。
    2. KEY データ名は修飾できる。
    3. KEY データ名が示すデータ項目には、可変長項目を指定できない。
    4. file-name-1 が複数のレコード記述を含む場合、KEY データ名が示すデータ項目は、1 つのレコード記述内にのみ指定する必要がある。1 つのレコード記述項内の KEY データ名が参照する文字位置は、そのファイルのすべてのレコードのキーとして扱われる。
    5. KEY データ名が示すデータ項目のいずれも、OCCURS 句を含む記述項、または OCCURS 句を含む記述項に従属する記述項によって記述することはできない。
    6. OSVSVSC2MF KEY データ項目は、浮動小数点数項目でもよい。
    7. OSVSVSC2MF KEY が外部浮動小数点数の項目である場合、キーは英数字として扱われる。レコードを併合する順番は、使用する文字の照合順序によって異なる。
    8. OSVSVSC2MF KEY が内部浮動小数点数の項目である場合、レコードは数値順で併合される。
  8. MERGE 文では、複数ファイル リール内のファイル名は複数指定できない。
  9. MERGE 文では、ファイル名を繰り返し指定できない。
  10. MERGE 文は、手続き部の宣言部分以外の任意の場所に配置できる。
  11. ANS85 file-name-4 が索引ファイルを参照する場合、最初の data-name-1 では ASCENDING 指定を関連付ける。また、その data-name-1 が参照するデータ項目がレコード上で占める文字位置は、そのファイルの主レコード キーに関連付けられたデータ項目と同じにする。
  12. ANS85 GIVING を指定し、file-name-4 が参照するファイルに可変長レコードが含まれている場合、file-name-1 が参照するファイルに含まれるレコードのサイズは、file-name-4 に記述した最小のレコード以上かつ最大のレコード以下とする。file-name-4 が参照するファイルに固定長レコードが含まれている場合、file-name-1 が参照するファイルに含まれるレコードのサイズは、file-name-4 に記述した最大のレコード以下とする。

一般規則

  1. MERGE 文は、file-name-2 および file-name-3 が参照するファイルに含まれるすべてのレコードを併合する。
  2. file-name-1 が参照するファイルが固定長のレコードのみを含む場合、file-name-2 または file-name-3 が参照するファイルのレコードのうち file-name-1 の固定長レコードよりも文字位置が少ないものについては、そのレコードが file-name-1 の参照先のファイルに引き渡される際に、レコード内の最後の文字の後の最初の文字位置を起点として、その右側に空白が埋められる。
  3. 語 KEY に続くデータ名は、KEY 指定にどのように分割するかにかかわらず、重要度が下がる順に MERGE 文の左から右にリストする。つまり、左端のデータ名は第 1 キー、次のデータ名はその次に重要なキー、という順番で続く。
    1. ASCENDING を指定した場合、比較条件内の作用対象の比較規則に従って、キー データ名が示すデータ項目の内容の最低値から最高値へと順に併合される。
    2. DESCENDING を指定した場合、比較条件内の作用対象の比較規則に従って、キー データ名が示すデータ項目の内容の最高値から最低値へと順に併合される。
  4. 比較条件内の作用対象の比較規則に従い、1 つのデータ レコードのすべてのキー データ項目の内容が、1 つ以上の他のデータ レコードの対応するキー データ項目と等しい場合、これらのレコードは以下の順番で戻される。
    1. MERGE 文で指定した関連入力ファイルの順番に従う。
    2. 1 つの入力ファイルに関連付けたすべてのレコードを、別の入力ファイルのレコードを返す前に返す。
  5. 指定した文字キー データ項目の比較に適用される照合順序は、次の優先順位に従って MERGE 文の実行開始時に決定される。
    1. 最初に、MERGE 文内の COLLATING SEQUENCE 指定で設定した照合順序 (指定した場合)。
    2. 次に、プログラム用に設定された照合順序。
  6. file-name-2 および file-name-3 が参照するファイル内のレコードが、MERGE 文に関連付けられた ASCENDING KEY または DESCENDING KEY で指定した順番で整列されていないと、併合処理の結果は不定となる。
  7. file-name-2 および file-name-3 が参照するファイル内のすべてのレコードは、file-name-1 が参照するファイルに転送される。MERGE 文の実行開始時点で、file-name-2 および file-name-3 が参照するファイルが開かれていてはならない。MERGE 文を実行すると、file-name-2 および file-name-3 が参照する各ファイルに対して、以下の処理が行われる。
    1. ファイルの処理が開始する。この開始処理は、INPUT を指定した OPEN 文を実行した場合と同様に行われる。出力手続きを指定すると、制御が出力手続きに移る前にこの開始処理が行われる。
    2. 論理レコードを取得し、併合操作に引き渡す。各レコードは、NEXT および AT END を指定した READ 文を実行した場合と同様に取得される。

      file-name-1 が参照するファイルが可変長のレコードで記述されている場合、file-name-1 に書き込まれるレコードのサイズは、そのレコードを file-name-2 または file-name-3 から読み取った時点のサイズとなる。これは、file-name-1 のファイルの整列併合ファイル記述項で指定した RECORD IS VARYING 句または OCCURS 句の DEPENDING ON 指定で参照されるデータ項目の内容とは無関係である。

      相対ファイルについては、MERGE 文の実行後の相対キー データ項目の内容は不定となる。

    3. ファイルの処理が終了する。この終了処理は、オプションの指定がない CLOSE 文を実行した場合と同様に行われる。出力手続きを指定した場合は、手続き内の最後の文に制御が移るまで、この終了処理は実行されない。

      これらの暗黙指定の関数は、関連付けられた USE AFTER EXCEPTION/ERROR 手続きを実行するように行われる。

      file-name-2 または file-name-3 のファイル記述項で指定した RECORD IS VARYING 句の DEPENDING ON 指定が参照するデータ項目の内容は、MERGE 文の完了時は不定となる。

  8. 出力手続きは、file-name-1 が参照するファイルから、併合した順番で RETURN 文で 1 つずつ使用できるレコードを選択、変更、またはコピーするために必要な任意の手続きで構成できる。この範囲には、出力手続きの範囲内の CALL、EXIT、GO TO および PERFORM 文が制御を転送した結果として実行されるすべての文、および出力手続きの範囲内の文の実行結果として実行される宣言手続き内のすべての文が含まれる。この出力手続きの範囲内では、MERGE 文、RELEASE 文、または SORT 文は実行できない。「COBOL 言語の概念」の章の「制御の明示移行および暗黙移行」トピックを参照。
  9. 出力手続きを指定すると、MERGE 文の実行中に制御がその手続きに移る。コンパイラは、出力手続きの最後の文の末尾に復帰メカニズムを挿入する。出力手続きの最後の文に制御が移ると、RETURN 文によって併合処理が終了してから、MERGE 文の後の次の実行可能文に制御が移る。出力手続きに入る前の段階で、併合手続きは、要求に応じて、併合した順番の次のレコードを選択できる状態になっている。出力手続き内の RETURN 文は、次のレコードを要求する。
  10. 出力手続きの実行中は、file-name-2、file-name-3、または file-name-4 が参照するファイルを操作したり、それらに関連付けられたレコード領域を呼び出したりする文は実行できない。
  11. GIVING を指定すると、MERGE 文の暗黙の出力手続きとして、併合されたすべてのレコードは file-name-4 が参照するファイルに書き込まれる。MERGE 文の実行開始時点で、file-name-4 が参照するファイルが開かれていてはならない。MERGE 文を実行すると、file-name-4 が参照する各ファイルに対して、以下の処理が行われる。
    1. ファイルの処理が開始する。この開始処理は、OUTPUT を指定した OPEN 文を実行した場合と同様に行われる。
    2. 併合された論理レコードが戻されてファイルに書き込まれる。各レコードは、オプションの指定がない WRITE 文を実行した場合と同様に書き込まれる。

      file-name-4 が参照するファイルが可変長のレコードで記述されている場合、file-name-4 に書き込まれるレコードのサイズは、そのレコードを file-name-1 から読み取った時点のサイズとなる。これは、file-name-4 のファイル記述項で指定した RECORD IS VARYING 句または OCCURS 句の DEPENDING ON 指定で参照されるデータ項目の内容とは無関係である。

      相対ファイルについては、戻される最初のレコードの相対キー データ項目の値は 1、戻される 2 番目のレコードの値は 2、と続く。相対キー データ項目の内容は、MERGE 文の実行後に不定となる。

    3. ファイルの処理が終了する。この終了処理は、オプションの指定がない CLOSE 文を実行した場合と同様に行われる。

    これらの暗黙指定の関数は、関連付けられた USE AFTER EXCEPTION/ERROR 手続きを実行するように行われる。ただし、その USE 手続きにより、file-name-4 が参照するファイルを操作したり、file-name-4 に関連付けられたレコード領域を呼び出したりする文は実行できない。ファイルの外部定義境界を越えて最初に書き込む場合、そのファイルに対して指定した USE AFTER EXCEPTION/ERROR 手続きが実行される。USE 手続きから制御が戻された場合、またはそのような USE 手続きを指定していない場合、ファイルの処理は上記の段落 11c に記載のとおり終了する。

    file-name-1 のファイル記述項で指定した RECORD IS VARYING 句の DEPENDING ON 指定が参照するデータ項目の値は、GIVING を指定した MERGE 文の完了時には不定となる。

  12. file-name-4 が参照するファイルが固定長のレコードのみを含む場合、file-name-1 が参照するファイルのレコードのうち file-name-4 の固定長レコードよりも文字位置が少ないものについては、そのレコードが file-name-4 の参照先のファイルに戻される際に、レコード内の最後の文字の後の最初の文字位置を起点として、その右側に空白が埋められる。
  13. 区分化」トピックに記載のとおり、MERGE 文を含むプログラムでは、区分化を適用できる。ただし、以下の制約事項がある。
    1. 独立区分以外の節にある MERGE 文が参照する出力手続きは、以下の範囲に含める。
      1. 非独立区分に完全に含まれる
      2. 単一の独立区分に完全に含まれる
    2. 独立区分内の MERGE 文が参照する出力手続きは、以下の範囲に含める。
      1. 非独立区分に完全に含まれる
      2. その MERGE 文と同じ独立区分に完全に含まれる
  14. OSVSVSC2MF  MERGE 文では、ソース要素で SORT-RETURN 特殊レジスタを使用できる。この特殊レジスタには、併合処理の完了時に 0 (正常終了) または 16 (不成功) の戻りコードが含まれる。この特殊レジスタの値を出力手続きで 16 に設定して、併合処理を中断できる。この場合、次の RETURN 文で処理が終了する。