Rational Developer for System z
COBOL for Windows バージョン 7.5 言語解説書


MERGE ステートメント

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

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

フォーマット
構文図を読む構文図をスキップする>>-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 番目のレベルのキーとなる、というようになります。

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

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

KEY データ項目が英字、英数字、英数字編集、数字編集の場合、キー値のシーケンスは使用される照合シーケンスに依存します (後出の COLLATING SEQUENCE 句を参照)。

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

KEY が使用法 DISPLAY を持つ外部浮動小数点項目の場合、キーは英数字カテゴリーとして扱われます。レコードがマージされるシーケンスは、使用される照合シーケンスに依存します。

KEY が使用法 NATIONAL を持つ外部浮動小数点項目の場合、キーは国別カテゴリーとして扱われます。

KEY が内部浮動小数点項目の場合、キー値のシーケンスは数値順となります。

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

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

COLLATING SEQUENCE 句

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

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

COLLATING SEQUENCE 句は、単一バイトの ASCII コード・ページが有効である場合にのみ有効です。

英字名-1
これは SPECIAL-NAMES 段落の ALPHABET 文節で指定されている必要があります。英字名文節の句のうちいずれか 1 つを指定することができ、次のようになります。
STANDARD-1
照合シーケンスは、文字の 16 進値順に基づきます。
STANDARD-2
照合シーケンスは、文字の 16 進値順に基づきます。
NATIVE
ランタイムのロケールで指定された照合シーケンスが選択されます。
EBCDIC
EBCDIC 照合シーケンスがすべての英数字比較のために使用されます。 (EBCDIC 照合シーケンスは、付録C. EBCDIC および ASCII の照合シーケンスに示されています。)
リテラル
ALPHABET-NAME 文節でリテラルを指定したことにより設定された照合シーケンスが、すべての英数字比較のために使用されます。
 

COLLATING SEQUENCE 句を省略した場合は、 OBJECT-COMPUTER 段落の PROGRAM COLLATING SEQUENCE 文節 (指定されている場合) で使用したい照合シーケンスを識別します。MERGE ステートメントの COLLATING SEQUENCE 句および OBJECT-COMPUTER 段落の PROGRAM COLLATING SEQUENCE 文節を両方とも省略した場合、COLLSEQ コンパイラー・オプションで指定する照合シーケンスが使用されます。COLLSEQ(EBCDIC) を指定した場合、EBCDIC 照合シーケンスが使用されます。COLLSEQ(LOCALE) を指定した場合、ロケールで指定された照合シーケンスが使用されます。ロケールの詳細については、付録G. ロケールの考慮事項を参照してください。

USING 句

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

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

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

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

GIVING 句

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

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

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

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

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-RETURN 特殊レジスター
詳細については、SORT-RETURNを参照してください。

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

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

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


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

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