MERGE 文は、指定したキーのセットで複数の同一順編成ファイルを結合し、その処理中に出力手続きまたは出力ファイルがレコードを併合順で利用できるようにする。
一般形式
指令
- 予約語リストのフラグ設定および修正を行うコンパイラ指令に加えて、以下の指令が、本セクションに記載の構文または意味内容に影響を与える可能性がある。
- CALLSORT"EXTSM" - USING または GIVING 句に最大 128 個のファイルを指定できる。この指令を指定しない場合、ファイル名は 10 個に制限される。
一般規則
- MERGE 文は、file-name-2 および file-name-3 が参照するファイルに含まれるすべてのレコードを併合する。
- file-name-1 が参照するファイルが固定長のレコードのみを含む場合、file-name-2 または file-name-3 が参照するファイルのレコードのうち file-name-1 の固定長レコードよりも文字位置が少ないものについては、そのレコードが
file-name-1 の参照先のファイルに引き渡される際に、レコード内の最後の文字の後の最初の文字位置を起点として、その右側に空白が埋められる。
- 語 KEY に続くデータ名は、KEY 指定にどのように分割するかにかかわらず、重要度が下がる順に MERGE 文の左から右にリストする。つまり、左端のデータ名は第 1 キー、次のデータ名はその次に重要なキー、という順番で続く。
- ASCENDING を指定した場合、比較条件内の作用対象の比較規則に従って、キー データ名が示すデータ項目の内容の最低値から最高値へと順に併合される。
- DESCENDING を指定した場合、比較条件内の作用対象の比較規則に従って、キー データ名が示すデータ項目の内容の最高値から最低値へと順に併合される。
- 比較条件内の作用対象の比較規則に従い、1 つのデータ レコードのすべてのキー データ項目の内容が、1 つ以上の他のデータ レコードの対応するキー データ項目と等しい場合、これらのレコードは以下の順番で戻される。
- MERGE 文で指定した関連入力ファイルの順番に従う。
- 1 つの入力ファイルに関連付けたすべてのレコードを、別の入力ファイルのレコードを返す前に返す。
- 指定した文字キー データ項目の比較に適用される照合順序は、次の優先順位に従って MERGE 文の実行開始時に決定される。
- 最初に、MERGE 文内の COLLATING SEQUENCE 指定で設定した照合順序 (指定した場合)。
- 次に、プログラム用に設定された照合順序。
- file-name-2 および file-name-3 が参照するファイル内のレコードが、MERGE 文に関連付けられた ASCENDING KEY または DESCENDING KEY で指定した順番で整列されていないと、併合処理の結果は不定となる。
- file-name-2 および file-name-3 が参照するファイル内のすべてのレコードは、file-name-1 が参照するファイルに転送される。MERGE 文の実行開始時点で、file-name-2 および file-name-3 が参照するファイルが開かれていてはならない。MERGE
文を実行すると、file-name-2 および file-name-3 が参照する各ファイルに対して、以下の処理が行われる。
- ファイルの処理が開始する。この開始処理は、INPUT を指定した OPEN 文を実行した場合と同様に行われる。出力手続きを指定すると、制御が出力手続きに移る前にこの開始処理が行われる。
- 論理レコードを取得し、併合操作に引き渡す。各レコードは、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 文の実行後の相対キー データ項目の内容は不定となる。
- ファイルの処理が終了する。この終了処理は、オプションの指定がない CLOSE 文を実行した場合と同様に行われる。出力手続きを指定した場合は、手続き内の最後の文に制御が移るまで、この終了処理は実行されない。
これらの暗黙指定の関数は、関連付けられた USE AFTER EXCEPTION/ERROR 手続きを実行するように行われる。
file-name-2 または file-name-3 のファイル記述項で指定した RECORD IS VARYING 句の DEPENDING ON 指定が参照するデータ項目の内容は、MERGE 文の完了時は不定となる。
- 出力手続きは、file-name-1 が参照するファイルから、併合した順番で RETURN 文で 1 つずつ使用できるレコードを選択、変更、またはコピーするために必要な任意の手続きで構成できる。この範囲には、出力手続きの範囲内の CALL、EXIT、GO
TO および PERFORM 文が制御を転送した結果として実行されるすべての文、および出力手続きの範囲内の文の実行結果として実行される宣言手続き内のすべての文が含まれる。この出力手続きの範囲内では、MERGE 文、RELEASE 文、または SORT
文は実行できない。「COBOL 言語の概念」の章の「制御の明示移行および暗黙移行」トピックを参照。
- 出力手続きを指定すると、MERGE 文の実行中に制御がその手続きに移る。コンパイラは、出力手続きの最後の文の末尾に復帰メカニズムを挿入する。出力手続きの最後の文に制御が移ると、RETURN 文によって併合処理が終了してから、MERGE 文の後の次の実行可能文に制御が移る。出力手続きに入る前の段階で、併合手続きは、要求に応じて、併合した順番の次のレコードを選択できる状態になっている。出力手続き内の
RETURN 文は、次のレコードを要求する。
- 出力手続きの実行中は、file-name-2、file-name-3、または file-name-4 が参照するファイルを操作したり、それらに関連付けられたレコード領域を呼び出したりする文は実行できない。
- GIVING を指定すると、MERGE 文の暗黙の出力手続きとして、併合されたすべてのレコードは file-name-4 が参照するファイルに書き込まれる。MERGE 文の実行開始時点で、file-name-4 が参照するファイルが開かれていてはならない。MERGE
文を実行すると、file-name-4 が参照する各ファイルに対して、以下の処理が行われる。
- ファイルの処理が開始する。この開始処理は、OUTPUT を指定した OPEN 文を実行した場合と同様に行われる。
- 併合された論理レコードが戻されてファイルに書き込まれる。各レコードは、オプションの指定がない WRITE 文を実行した場合と同様に書き込まれる。
file-name-4 が参照するファイルが可変長のレコードで記述されている場合、file-name-4 に書き込まれるレコードのサイズは、そのレコードを file-name-1 から読み取った時点のサイズとなる。これは、file-name-4
のファイル記述項で指定した RECORD IS VARYING 句または OCCURS 句の DEPENDING ON 指定で参照されるデータ項目の内容とは無関係である。
相対ファイルについては、戻される最初のレコードの相対キー データ項目の値は 1、戻される 2 番目のレコードの値は 2、と続く。相対キー データ項目の内容は、MERGE 文の実行後に不定となる。
- ファイルの処理が終了する。この終了処理は、オプションの指定がない 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 文の完了時には不定となる。
- file-name-4 が参照するファイルが固定長のレコードのみを含む場合、file-name-1 が参照するファイルのレコードのうち file-name-4 の固定長レコードよりも文字位置が少ないものについては、そのレコードが file-name-4
の参照先のファイルに戻される際に、レコード内の最後の文字の後の最初の文字位置を起点として、その右側に空白が埋められる。
- 「区分化」トピックに記載のとおり、MERGE 文を含むプログラムでは、区分化を適用できる。ただし、以下の制約事項がある。
- 独立区分以外の節にある MERGE 文が参照する出力手続きは、以下の範囲に含める。
- 非独立区分に完全に含まれる
- 単一の独立区分に完全に含まれる
- 独立区分内の MERGE 文が参照する出力手続きは、以下の範囲に含める。
- 非独立区分に完全に含まれる
- その MERGE 文と同じ独立区分に完全に含まれる


MERGE 文では、ソース要素で SORT-RETURN 特殊レジスタを使用できる。この特殊レジスタには、併合処理の完了時に 0 (正常終了) または 16 (不成功) の戻りコードが含まれる。この特殊レジスタの値を出力手続きで 16 に設定して、併合処理を中断できる。この場合、次の
RETURN 文で処理が終了する。