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


SORT ステートメント

SORT ステートメントは、1 つまたは複数のファイルからレコードを受け取り、指 定されたキー(複数も可能) に従ってそれらをソートし、出力プロシージャーを通し て、または出力ファイルの中で、それらのソート済みファイルを利用できるように します。MERGE ステートメントも参照してください。SORT ステートメントは、宣言部分の中を除き手続き部のどこにでも置くことができます。

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

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

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

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

>--+-----------------------------------------+------------------>
   '-+------+--DUPLICATES--+----+--+-------+-'   
     '-WITH-'              '-IN-'  '-ORDER-'     

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

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

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

ファイル名-1
ソートされるレコードを記述している SD 項目の中で指定されている名前。

SORT ステートメントの中にあるファイル名の対を、 同じ SAME SORT AREA 節または SAME SORT-MERGE AREA 節の中で指定することはできません。GIVING 節に関連したファイル名 (ファイル名-3 ...) は、SAME AREA 節には指定できません。 ただし、それらを SAME RECORD AREA 節に関連付けることは可能です。

ASCENDING KEY 句と DESCENDING KEY 句

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

データ名-1
SORT ステートメントがソートの際に基準として使用する KEY データ項目を指定します。 そのようなデータ名はそれぞれ、ファイル名-1 に関連するレコードの中のデータ項目を識別する必要があります。 KEY という語の後に置かれたデータ名は、 レベルが高いものから順に左から右へと SORT ステートメントの中にリストします。 その際、これらのデータ名が KEY 句の中でどのように分割されるかは関係ありません。 左端のデータ名が最もレベルの高いキーとなり、次のデータ名が 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) コンパイラー・オプションが有効な場合は、国別または国別編集
  • キー・データ項目は、以下の条件のもとでは、ウィンドウ表示日付フィールドとすることができます。
    • GIVING 句に索引付きファイルを指定してはなりません。 ファイル・システムが想定または行う (2 進) 順序付けは、 ソートの出力で提供されるウィンドウ表示日付順序付けと矛盾するからです。 このような索引付きファイルにウィンドウ表示日付マージ出力を書き込もうとしても、 ファイルのアクセス方法 (ファイル制御項目の ACCESS MODE) に応じて、 失敗するか、または 2 進順序付けが再び行われます。
    • 英数字のウィンドウ表示日付フィールドを SORT ステートメントの KEY として指定する場合は、 マージ操作の有効な照合シーケンスが EBCDIC である必要があります。したがって、SORT ステートメントの COLLATING SEQUENCE 句、 またはこの句を指定しない場合は、 OBJECT-COMPUTER 段落の PROGRAM COLLATING SEQUENCE 節に、 EBCDIC または NATIVE 以外の照合シーケンスを指定することはできません。

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

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

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

ファイル名-3 索引付きファイルを参照している場合、データ名-1 の最初の指定は、ASCENDING 句に関連付けられている必要があります。そして、そのデータ名-1 によって参照されるデータ項目は、そのファイルの主レコード・キーに関連付けられたデータ項目として、このレコードの中で同じ文字位置を占める必要があります。

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

  • ASCENDING を指定すると、最低のキー値から最高のキー値へのシーケンスとなります。
  • DESCENDING を指定すると、最高のキー値から最低のキー値へのシーケンスとなります。
  • KEY データ項目が USAGE NATIONAL で記述されている場合、KEY 値のシーケンスは国別文字の 2 進値に基づきます。
  • KEY データ項目が内部浮動小数点項目の場合は、キー値のシーケンスは数値順になります。
  • COLLATING SEQUENCE 句が指定されていない場合は、 比較条件のオペランド比較規則に従ってキーが比較されます。 (一般比較条件を参照)。
  • COLLATING SEQUENCE 句が指定されている場合は、英字、英数字、英数字編集、外部浮動小数点、および数字編集カテゴリーの キー・データ項目に対して、指定された照合シーケンスが使用されます。 それ以外のキー・データ項目については、比較条件のオペランド比較規則に従って比較が行われます。

DUPLICATES 句

DUPLICATES 句が指定され、あるレコードに関連するすべてのキー・エレメントの内容が、 1 つまたは複数の他のレコードの中の対応するキー・エレメントに一致している場合は、 これらのレコードは次のような順序で戻されます。

  • 関連付けられた入力ファイルの SORT ステートメント中に指定されている通りの順序。 ある 1 個のファイル内では、レコードがそのファイルからアクセスされるときの順序。
  • 入力プロシージャーが指定されているとき、 これらのレコードが入力プロシージャーにより解放されるときの順序。

DUPLICATES 句が指定されていない場合には、これらのレコードの順序は未定義です。 DUPLICATES 句の詳しい使用方法については、Enterprise COBOL プログラミング・ガイド」の代替索引に関連した説明を参照してください。

COLLATING SEQUENCE 句

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

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

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

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

USING 句

ファイル名-2, ...
入力ファイル。

USING 句が指定されている場合、ファイル名-2、... (つまり、入力ファイル) の中のすべてのレコードは自動的にファイル名-1 に移動されます。 SORT ステートメントの実行時に、これらのファイルがオープンしないでください。 コンパイラーが自動的にこれらのファイルをオープンし、 読み取り、レコードを使用可能にし、そしてクローズします。EXCEPTION/ERROR プロシージャーがこれらのファイルに対して指定されていると、 コンパイラーはこれらのプロシージャーへの必要なリンケージを設定します。

すべての入力ファイルは、データ部の中の FD 項目に記述されている必要があります。

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

INPUT PROCEDURE 句

この句によって、ソート処理を開始する前に、 入力レコードを選択したり修正したりするために使うプロシージャーの名前を指定します。

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

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

入力プロシージャーが指定されている場合、制御がその入力プロシージャーに渡されない限り、ファイル名-1 によって参照されたファイルを SORT ステートメントが順序付けすることはできません。コンパイラーは、入力プロシージャーの中の最後のステートメントの終わりに RETURN 挿入します。 制御が入力プロシージャーの中の最後のステートメントに渡されると、ファイル名-1 によって参照されるファイルに対して以前に解放されていたレコードがソートされます。

GIVING 句

ファイル名-3, ...
出力ファイル。

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

すべての出力ファイルは、データ部の中の FD 項目に記述されている必要があります。

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

SORT ステートメントの実行時に、出力ファイル (ファイル名-3、...) がオープンされないようにします。各出力ファイルに対して、SORT ステートメントが実行されると、 次のことが行われます。

  • ファイルの処理が開始されます。 この開始は、 OUTPUT 句指定の OPEN ステートメントが実行された場合と同様にして行われます。
  • ソートされた論理レコードが戻され、ファイル上に書き込まれます。 各レコードは、 何もオプショナルの句が指定されていない WRITE ステートメントが実行された場合と同様にして書き込まれます。

    相対ファイルの場合、 戻された最初のレコードの相対キー・データ項目には値 '1' が含まれます。戻された 2 番目のレコードでは、値 '2' が含まれるというようになります。 SORT ステートメントの実行が終わると、相対キー・データ項目は、 ファイルに最後に戻されたレコードを示しています。

  • ファイルの処理が終了します。 この終了は、 オプションの句が指定されていない CLOSE ステートメントを実行した場合と同様にして行われます。

これらの暗黙の関数は、関連付けられている USE AFTER EXCEPTION/ERROR プロシージャーを実行するように実行されます。 ただし、このような USE プロシージャーの実行によって、ファイル名-3 が参照するファイルを操作するステートメント、 または関連付けられているレコード域にアクセスする操作を行うステートメントが実行されないように注意してください。 ファイルの外部定義境界を超えて書き込む最初の試みが行われると、 そのファイルに USE AFTER STANDARD EXCEPTION/ERROR プロシージャーが指定されていれば、 それが実行されます。 制御がその USE プロシージャーから戻されるか、 またはこのような USE プロシージャーが指定されていなければ、 ファイルの処理は終了します。

OUTPUT PROCEDURE 句

この句によって、ソート処理から出力レコードを選択したり修正したりするために使うプロシージャーの名前を指定します。

プロシージャー名-3
出力プロシージャーの中の最初の (または唯一の) セクションまたは段落を指定します。
プロシージャー名-4
出力プロシージャーの最後のセクションまたは段落を識別します。

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

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

INPUT PROCEDURE および OUTPUT PROCEDURE は基本的な PERFORM ステートメント用の句と類似しています。例えば、出力プロシージャーにあるプロシージャーを指定すると、そのプロシージャーは、 それが PERFORM ステートメントの中で指定された場合とまったく同じように、 ソート操作時に実行されます。PERFORM ステートメントによる場合と同様に、プロシージャーの実行は、 最後のステートメントがその実行を終えると終了します。 入力プロシージャーまたは出力プロシージャーの最後のステートメントとして、 EXIT ステートメントを使用することができます (EXIT ステートメントを参照)。

SORT 特殊レジスター

特殊レジスターの SORT-CORE-SIZE、SORT-MESSAGE、および SORT-MODE-SIZE は、 ソート制御ファイルの中の制御ステートメントのオプションで使用されるキーワードと同じ働きをします。ソート制御データ・セットの定義は、SORT-CONTROL 特殊レジスターを使用して行います。

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

SORT-MESSAGE 特殊レジスター
SORT-MESSAGEを参照してください。
SORT-CORE-SIZE 特殊レジスター
SORT-CORE-SIZEを参照してください。
SORT-FILE-SIZE 特殊レジスター
SORT-FILE-SIZEを参照してください。
SORT-MODE-SIZE 特殊レジスター
SORT-MODE-SIZEを参照してください。
SORT-CONTROL 特殊レジスター
SORT-CONTROLを参照してください。
SORT-RETURN 特殊レジスター
SORT-RETURNを参照してください。

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

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

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


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

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