コンテンツフレーム起動

抽出のソート 文書を SAP ライブラリストラクチャに組み込む

以下の命令を使用して、内部テーブルとほぼ同じ方法で抽出データセットをソートすることができます。

SORT [ASCENDING|DESCENDING] [AS TEXT] [STABLE]
      BY <f1> [ASCENDING|DESCENDING] [AS TEXT]
       ...

          <fn> [ASCENDING|DESCENDING] [AS TEXT].

SORT 命令は、プログラムの抽出データセットの登録を終了し、同時にそのレコードをソートします。BY オプションを指定しない場合、データセットは、HEADER 項目グループで指定されたキーにもとづいてソートされます。

抽出データセットは、各種のキーを必要な数だけ使用して、何度でもプログラムでソートすることができます。唯一の前提条件は、抽出プロセス時にソート対象の全項目が HEADER に格納されていることです。LOOP ENDLOOP の間で SORT 命令を使用することはできません。ただし、抽出データセットは、任意の順序でソートおよび読込を行うことができます。ソート命令の後で EXTRACT 命令を追加使用することはできません。追加使用すると実行時エラーが発生します。

BY オプションを使用すると、各種のソートキーを定義することができます。その結果、指定されたコンポーネント <f 1> ... <fn> にもとづいてデータセットがソートされます。これらのコンポーネントは、HEADER 項目グループの項目か、または HEADER 項目グループの項目だけを含む項目グループの項目でなければなりません。キー項目数は 50 に制限されています。コンポーネント<f1> ... <fn> の順序によってソート順序が決まります。BY の前に指定したオプションが、BY の後に指定された全項目のデフォルト値として使用されます。個別項目の後に指定したオプションによって、BY の前にオプションを指定した項目が上書きされます。

ソート方向を定義するには、DESCENDING またはASCENDING オプションを使用します ( 昇順がデフォルトの方向です) 。文字列に対しては、AS TEXT オプションを使用してソート方法を定義することができます。この場合は、内部テーブルと同様にアルファベット順ソートが強制されます。抽出データセットを 2 回以上アルファベット順でソートする場合は、パフォーマンス上の理由により、テキスト項目ではなくアルファベット順ソートが可能な項目をソートキーに組み込む必要があります。この項目に書き込むには、CONVERT 命令 を使用します。

BY の前に AS TEXT を配置する場合、このオプションはソートキーのタイプ C 項目にのみ適用されます。項目の後にAS TEXT を配置する場合、その項目はタイプ C でなければなりません。項目グループの後に AS TEXT を配置する場合、このオプションは、その項目グループ内のタイプ C 項目にのみ適用されます。

このソートプロセスは一定していません。つまり、同じソートキーを持つ古いレコードの順序を必ずしも維持する必要はありません。安定したソートを行うには、STABLE オプションを使用します。

データのソートに使用するメインメモリが不足している場合は、ソートプロセス中にデータが外部の補助ファイルに書き込まれます。このファイルの名称は、SAP プロファイルパラメータ DIR_SORTTMP によって決まります。

SORT 命令では、ソートキーの HEX 00 を含む全項目が他の全エントリのにソートされます。この機能は、論理データベースの使用時には重要です。論理データベースで階層レベルの読込が完了すると、そのレベルの全項目に値 HEX 00 が書き込まれます。同様に、GET 命令 (FIELDS オプション) で項目一覧を使用すると、論理データベースによって、その項目一覧にない全項目に HEX 00 が書き込まれます。

SORT 命令を用いて抽出データセットで実行された各ソートプロセスによって、制御レベルが定義されます。この定義は、後続の制御レベル処理に必要です。

 例

以下のプログラムは、論理データベース F1S にリンクしているものと仮定します。

REPORT DEMO.

NODES: SPFLI, SFLIGHT.

FIELD-GROUPS: HEADER, FLIGHT_INFO, FLIGHT_DATE.

INSERT: SPFLI-CARRID SPFLI-CONNID SFLIGHT-FLDATE
    INTO HEADER,
    SPFLI-CITYFROM SPFLI-CITYTO
    INTO FLIGHT_INFO.

START-OF-SELECTION.

GET SPFLI.
   EXTRACT FLIGHT_INFO.

GET SFLIGHT.
   EXTRACT FLIGHT_DATE.

END-OF-SELECTION.

   SORT DESCENDING.

  LOOP.
    AT FIRST.
      WRITE / 'Start of LOOP'.
      ULINE.
    ENDAT.
    AT FLIGHT_INFO WITH FLIGHT_DATE.
      WRITE: / 'Info:',
               SPFLI-CARRID, SPFLI-CONNID, SFLIGHT-FLDATE,
               SPFLI-CITYFROM, SPFLI-CITYTO.

    ENDAT.
     AT FLIGHT_DATE.
       WRITE: / 'Date:',
                SPFLI-CARRID, SPFLI-CONNID, SFLIGHT-FLDATE.

     ENDAT.
     AT LAST.
   ULINE.
      WRITE / 'End of LOOP'.

     ENDAT.
   ENDLOOP.

SORT DESCENDING 命令を除き、この例は抽出の読込のセクションの例と同じです。SORT 命令は、ループを使用して抽出データセットを読み込む前に、HEADER 項目グループの 3 つの項目によってそのデータセットを降順でソートするようにシステムに指示します。一覧の最後は、次のように表示されます。

このグラフィックは添付のテキストに説明されています

HEX 00 ( 一覧の未定義の文字) を含む、項目 SFLIGHT-FLDATE のレコードが他のレコードの前にソートされていることに注意してください。この処理は、論理データベースのデータの階層を保持するために、ソート順序とは無関係に行われます。

 

 

 

 

 

コンテンツフレーム終了