Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 言語解説書


MERGE ステートメント

MERGE ステートメントは、1 つまたは複数のキーに基づいて、 2 つ以上の同じシーケンスで並べられたファイル (すなわち、 同じ 1 組の昇順 / 降順キーに従ってすでにソートされているファイル) を結合して、 出力プロシージャーまたは出力ファイルで、マージしたシーケンスでレコードを使用できるようにします。

MERGE ステートメントは、宣言セクション以外ならば、手続き部のどこにでも置くことができます。

MERGE ステートメントは、THREAD コンパイラー・オプションを指定してコンパイルされたプログラムではサポートされません。

構文図を読む構文図をスキップする
フォーマット 

>>-MERGE--ファイル名-1------------------------------------------>

   .-------------------------------------------------.   
   |                                  .------------. |   
   V                                  V            | |   
>----+----+--+-ASCENDING--+--+-----+----データ名-1--+-+---------->
     '-ON-'  '-DESCENDING-'  '-KEY-'                     

>--+-------------------------------------------+--USING--------->
   '-+-----------+--SEQUENCE--+----+--英字名-1--'          
     '-COLLATING-'            '-IS-'                      

                 .--------------.   
                 V              |   
>--ファイル名-2------ファイル名-3-+------------------------------->

>--+-OUTPUT PROCEDURE--+----+----プロシージャー名-1--+---------------------------------+-+-><
   |                   '-IS-'                      '-+-THROUGH-+--プロシージャー名-2-' |   
   |                                                 '-THRU----'                     |   
   |         .--------------.                                                        |   
   |         V              |                                                        |   
   '-GIVING-----ファイル名-4-+--------------------------------------------------------'   

ファイル名-1
マージするレコードを記述する SD 項目の中で指定された名前。

MERGE ステートメントの中で同じファイル名を繰り返すことはできません。

MERGE ステートメントの中で対になるどのファイル名も、同じ SAME AREA 節、 SAME SORT AREA 節、 または SAME SORT-MERGE AREA 節の中で指定することはできません。 同じ SAME RECORD AREA 節内では、MERGE ステートメントに任意のファイル名を指定できます。

MERGE ステートメントが実行されると、ファイル名-2ファイル名-3 などに含まれているすべてのレコードがマージ・プログラムに受け取られ、 その後指定されたキー (複数のキーも可) に従ってマージされます。

ASCENDING/DESCENDING KEY 句

この句は、指定されたマージ・キーに基づいて、 レコードを昇順または降順 (どちらになるかは指定された句次第) で処理することを指定します。

データ名-1
マージを行う際に基準となる KEY データ項目を指定します。 そのようなデータ名はそれぞれ、ファイル名-1 に関連するレコードの中のデータ項目を識別する必要があります。 KEY という語の後に置かれるデータ名は、これらがどのように KEY 句に分割されるかに関係なく、 キーのレベルが高いものから順に MERGE ステートメントの中で左から右へ列挙されていきます。 左端のデータ名が最もレベルの高いキーとなり、次のデータ名が 2 番目のレベルのキーとなる、というようになります。

次の規則が適用されます。

  • 特定の KEY データ項目は、各入力ファイルの中で、物理的に同じ位置になければならず、 また同じデータ・フォーマットを持っていなければなりません。 しかし、同じデータ名を持っている必要はありません。
  • ファイル名-1 が 2 つ以上のレコード記述を持つ場合には、KEY データ項目は、 どちらか一方のレコード記述の中にのみ記述されている必要があります。
  • ファイル名-1 が可変長レコードを含んでいる場合には、KEY データ項目はすべて、 レコードの最初の n 個の文字位置内に入っていなければなりません (nファイル名-1 で指定されている最小レコード・サイズ)。
  • KEY データ項目は、OCCURS 節を含んでいたり、OCCURS 節を含む項目に従属していたりすることはできません。
  • KEY データ項目には、以下を指定できません。
    • 可変位置項目
    • 可変オカレンス・データ項目を含むグループ項目
    • USAGE NATIONAL で記述された数字カテゴリー (国別 10 進数タイプ)
    • USAGE NATIONAL で記述された外部浮動小数点カテゴリー (国別浮動小数点)
    • DBCS カテゴリー
  • KEY データ項目は、 修飾することができます。
  • KEY データ項目は、以下のデータ・カテゴリーのいずれかにすることができます。
    • 英字、英数字、英数字編集
    • 数字 (USAGE NATIONAL の数字を除く)
    • 数字編集 (USAGE DISPLAY または NATIONAL)
    • 内部浮動小数点または display 浮動小数点
    • NCOLLSEQ(BINARY) コンパイラー・オプションが有効な場合は、国別または国別編集
  • キー・データ項目は、以下の条件のもとでは、ウィンドウ表示日付フィールドとすることができます。
    • USING 句に指定する入力ファイルは、順次、相対、索引付きのどれでも可能ですが、 ウィンドウ表示日付マージ・キーと同じ位置にレコード・キー、代替レコード・キー、または相対キーを持っていてはなりません。 ファイル・システムはウィンドウ表示日付フィールドをキーとしてサポートしません。 このため、ファイル・システムによって行われる順序付けが、マージ操作のためのウィンドウ表示日付フィールド・サポートと矛盾する可能性があります。実際、マージを正常に実行させるためには、ウィンドウ表示日付の順序付けも含め、 MERGE ステートメントによって指定された同じ順序で入力ファイルを事前にソートしておかなければなりません。
    • GIVING 句に索引付きファイルを指定してはなりません。 ファイル・システムが想定または行う (2 進) 順序付けは、 マージの出力で提供されるウィンドウ表示日付順序付けと矛盾するからです。 このような索引付きファイルにウィンドウ表示日付マージ出力を書き込もうとしても、 ファイルのアクセス方法 (ファイル制御項目の ACCESS MODE 節に指定) に応じて、 失敗するか、または 2 進順序付けが再び行われます。
    • 英数字のウィンドウ表示日付フィールドを MERGE ステートメントの KEY として指定する場合は、 マージ操作の有効な照合シーケンスが EBCDIC でなければなりません。MERGE ステートメントの COLLATING SEQUENCE 句、 またはこの句を指定しない場合は、 OBJECT-COMPUTER 段落の PROGRAM COLLATING SEQUENCE 節に、EBCDIC または NATIVE 以外の照合シーケンスを指定してはなりません。

    MERGE ステートメントがこれらの条件を満たしていると、 実行環境に世紀ウィンドウ表示をサポートするソート製品が組み込まれている場合には、SORT 2000 年機能を利用してマージ操作が行われます。

    年末尾型日付フィールドは MERGE ステートメントの KEY として指定することが可能で、 それに対応する機能として、ソート製品の世紀ウィンドウ表示機能を利用できます。

    ウィンドウ表示日付フィールドを KEY データ項目として使用する方法については、「Enterprise COBOL プログラミング・ガイド」を参照してください。

マージ処理の方向は、次に示すように ASCENDING または DESCENDING のどちらのキーワードを指定するかによって異なります。

  • ASCENDING を指定すると、最低のキー値から最高のキー値へのシーケンスとなります。
  • DESCENDING を指定すると、最高のキー値から最低のキー値へのシーケンスとなります。

KEY データ項目が USAGE NATIONAL で記述されている場合、KEY 値のシーケンスは国別文字の 2 進値に基づきます。

COLLATING SEQUENCE 句が指定されていない場合は、 比較条件のオペランド比較規則に従ってキーが比較されます。 詳細については、一般比較条件を参照してください。

COLLATING SEQUENCE 句が指定されている場合は、英字、英数字、英数字編集、外部浮動小数点、および数字編集カテゴリーの キー・データ項目に対して、指定された照合シーケンスが使用されます。 それ以外のキー・データ項目については、比較条件のオペランド比較規則に従って比較が行われます。

COLLATING SEQUENCE 句

この句によって、このマージ処理で KEY データ項目に対して行われる英数字比較で 使用する照合シーケンスを指定します。

COLLATING SEQUENCE 句は、英字または英数字以外のキーには影響を与えません。

英字名-1
これは SPECIAL-NAMES 段落の ALPHABET 節で指定されている必要があります。 英字名節の句のうちいずれか 1 つを指定することができ、次のようになります。
STANDARD-1
ASCII 照合シーケンスがすべての英数字比較のために使用されます。 (ASCII 照合シーケンスは、米国英語 ASCII コード・ページに示されています。)
STANDARD-2
ISO/IEC 646、7 ビットの情報交換用コード化文字セット」の国際参照バージョンに定義されている 7 ビット・コードが、すべての英数字比較のために使用されます。
NATIVE
EBCDIC 照合シーケンスがすべての英数字比較のために使用されます。 (EBCDIC 照合シーケンスは、EBCDIC 照合シーケンスに示されています。)
EBCDIC
EBCDIC 照合シーケンスがすべての英数字比較のために使用されます。(EBCDIC 照合シーケンスは、EBCDIC 照合シーケンスに示されています。)
リテラル
ALPHABET-NAME 節でリテラルを指定したことにより設定された照合シーケンスが、 すべての英数字比較のために使用されます。

COLLATING SEQUENCE 句を省略した場合は、 OBJECT-COMPUTER 段落の PROGRAM COLLATING SEQUENCE 節 (指定されている場合) で使用したい照合シーケンスを識別します。MERGE ステートメントの COLLATING SEQUENCE 句および OBJECT-COMPUTER 段落の PROGRAM COLLATING SEQUENCE 節を両方とも省略した場合には、EBCDIC 照合シーケンスが使用されます。

USING 句

ファイル名-2ファイル名-3、 ...
これは入力ファイルを指定します。

MERGE 操作では、ファイル名-2ファイル名-3、 ... (入力ファイル) にあるすべてのレコードはファイル名-1 に転送されます。MERGE ステートメントの実行時に、これらのファイルがオープンされていてはなりません。 入力ファイルは自動的にオープンされ、読み取られ、クローズされます。これらのファイルの入力操作に DECLARATIVE プロシージャーが指定されていると、エラーが起きた場合には宣言はエラーとなります。

入力ファイルはいずれも、順次アクセス・モードまたは動的アクセス・モードを指定し、 データ部の中の FD 項目に記述されていなければなりません。

ファイル名-1 が可変長レコードを含んでいる場合は、入力ファイル (ファイル名-2ファイル名-3、...) に入っているレコードのサイズは、ファイル名-1 に記述されている最小レコード以上または最大レコード以下でなくてはなりません。ファイル名-1 が固定長レコードを含んでいる場合は、入力ファイルに入っているレコードのサイズは、ファイル名-1 で記述されている最大レコード以下である必要があります。詳細については、Enterprise COBOL プログラミング・ガイド」を参照してください。

GIVING 句

ファイル名-4、 ...
これは出力ファイルを指定します。

GIVING 句が指定されたとき、ファイル名-1 にあるマージされたレコードはすべて、 自動的に出力ファイル (ファイル名-4, ...) に転送されます。

出力ファイルはいずれも、順次アクセス・モードまたは動的アクセス・モードを指定し、 データ部の中の FD 項目に記述されていなければなりません。

出力ファイル (ファイル名-4、...) に可変長レコードが入っている場合、 ファイル名-1 に入っているレコードのサイズは、その出力ファイルに記述されている最小レコード以上または最大レコード以下でなくてはなりません。出力ファイルが固定長レコードを含んでいる場合は、ファイル名-1 に入っているレコードのサイズは、出力ファイルで記述されている最大レコードより大きくすることはできません。詳細については、Enterprise COBOL プログラミング・ガイド」を参照してください。

MERGE ステートメントの実行時に、出力ファイル (ファイル名-4、...) がオープンされてはなりません。出力ファイルは自動的にオープンされ、読み取られ、クローズされます。これらのファイルの出力操作に DECLARATIVE プロシージャーが指定されていると、エラーが起きた場合には宣言はエラーとなります。

OUTPUT PROCEDURE 句

この句は、マージ処理から得られた出力レコードを選択または変更するプロシージャーの名前を指定します。

プロシージャー名-1
OUTPUT PROCEDURE の中の最初の (または唯一の) セクションまたは段落を指定します。
プロシージャー名-2
OUTPUT PROCEDURE の中の最後のセクションまたは段落を指定します。

OUTPUT PROCEDURE は、ファイル名-1 によって参照されたファイルから RETURN ステートメントによって 1 個ずつ使用可能にされるレコードを マージ順に選択、修正、またはコピーするときに必要になるプロシージャーで構成することができます。この範囲には、出力プロシージャーの範囲内で CALL、EXIT、GO TO、PERFORM、および XML PARSE ステートメントによって制御が移動して実行されるすべてのステートメントが含まれます。また、この範囲には、出力プロシージャーの範囲内のステートメントが実行されると実行される宣言型プロシージャーの中のすべてのステートメントも含まれます。出力プロシージャーの範囲内では、MERGE、 RELEASE、または SORT のステートメントを実行させることはできません。

出力プロシージャーが指定されていると、ファイル名-1 によって参照されたファイルが MERGE ステートメントによって順序付けされてから、制御はこの出力プロシージャーに渡されます。 コンパイラーは、出力プロシージャーの最後のステートメントの終わりに、戻りメカニズムを挿入します。 制御がこの出力プロシージャーの中の最後のステートメントに移ると、 この戻りメカニズムによってマージ処理が終了し、 ついで制御を MERGE ステートメントの後ろにある実行可能ステートメントに渡します。 出力プロシージャーに入る前に、マージ・プロシージャーは要求されたとき、 次のレコードをマージされた順に選択できる段階になっています。 出力プロシージャーの中の RETURN ステートメントは、次のレコードを要求することになります。

OUTPUT PROCEDURE 句は、基本的な PERFORM ステートメントと似ています。 例えば、OUTPUT PROCEDURE 句の中でプロシージャー名を指定すると、そのプロシージャーは、 それが PERFORM ステートメントで指定された場合と同様にして、マージ操作時に実行されます。 PERFORM ステートメントによる場合と同様に、プロシージャーの実行は、 最後のステートメントがその実行を終えると終了します。 OUTPUT PROCEDURE 句の最後のステートメントは、EXIT ステートメントにすることができます (EXIT ステートメントを参照)。

MERGE 特殊レジスター

SORT-CONTROL 特殊レジスター
ソート制御ファイル (これによりソート/マージ機能に追加を指定できます) は、SORT-CONTROL 特殊レジスターで識別します。

ソート制御ファイルを使用して制御ステートメントを指定する場合は、 ソート制御ファイルの中に指定されている値がその他の SORT 特殊レジスターにある値に優先します。

詳細については、SORT-CONTROLを参照してください。

SORT-MESSAGE 特殊レジスター
詳細については、SORT-MESSAGEを参照してください。 特殊レジスターの SORT-MESSAGE は、 ソート制御ファイルの中にある制御ステートメント用のオプションのキーワードと同じ働きをします。
SORT-RETURN 特殊レジスター
詳細については、SORT-RETURNを参照してください。

セグメント化に関する考慮事項

固定セグメントで MERGE ステートメントがコード化された場合、この MERGE ステートメントが参照するすべての出力プロシージャーは完全に固定セグメントの範囲内にあるか、プロシージャー全体が単一の独立セグメントに含まれている必要があります。

独立セグメントで MERGE ステートメントがコード化された場合、この MERGE ステートメントが参照するすべての出力プロシージャーは完全に固定セグメントの範囲内にあるか、プロシージャー全体が MERGE ステートメントと同じ独立セグメントに含まれている必要があります。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)