コンテンツフレーム起動

内部テーブルによるデータ調整 文書を SAP ライブラリストラクチャに組み込む

内部テーブルにデータを格納する際は、通常、読み込むデータベースごとに 1 つの内部テーブルを使用します。各内部テーブルには、該当するデータベーステーブルの一部または全部の列が含まれます。データベーステーブルごとにフラット構造を持つ内部テーブルを作成するか、または、たとえばネスト構造を持つ内部テーブルを作成するかを任意に設定することができます。複数のテーブルがあり、各テーブルがフラット構造を備えている場合は、重複しているキー項目を操作して各テーブルをリンクさせる必要があります。一方、ネスト内部テーブルを使用すると、データベーステーブルのデータを階層的に格納することができます。

内部テーブルは、非常に大量のデータの保存および処理には適しません。複数の異なる内部テーブルにデータを分割すると、テーブルを個々に処理しなければならないため、データ処理の実行時間が非常に長くなる可能性があります。さらに、内部テーブルは非圧縮形式で格納されるため、多くの記憶域が必要になります。場合によっては、システムでワークメモリの外部にデータセットを格納する必要もあります。これにより、データセットの処理時間はさらに長くなります。 

フラット内部テーブルによるデータ処理

 例

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

REPORT DEMO.

DATA: SUM TYPE I, CNT TYPE I.

NODES: SPFLI, SFLIGHT, SBOOK.

DATA: TAB_SPFLI   TYPE TABLE OF SPFLI,
      TAB_SFLIGHT TYPE TABLE OF SFLIGHT,
      TAB_SBOOK   TYPE TABLE OF SBOOK.

DATA: WA_SPFLI   LIKE LINE OF TAB_SPFLI,
      WA_SFLIGHT LIKE LINE OF TAB_SFLIGHT,
      WA_SBOOK   LIKE LINE OF TAB_SBOOK.

START-OF-SELECTION.

GET SPFLI.
   APPEND SPFLI TO TAB_SPFLI.

GET SFLIGHT.
   APPEND SFLIGHT TO TAB_SFLIGHT.

GET SBOOK.
   APPEND SBOOK TO TAB_SBOOK.

END-OF-SELECTION.

   SORT: TAB_SPFLI   BY CITYFROM CITYTO CONNID,
        TAB_SFLIGHT BY FLDATE,
        TAB_SBOOK   BY CLASS SMOKER BOOKID.

   LOOP AT TAB_SPFLI INTO WA_SPFLI.

    SKIP.
    WRITE: / WA_SPFLI-CARRID,
             WA_SPFLI-CONNID,
             'from', (15) WA_SPFLI-CITYFROM,
             'to',   (15) WA_SPFLI-CITYTO.

    ULINE.

     LOOP AT TAB_SFLIGHT INTO WA_SFLIGHT
                        WHERE CARRID = WA_SPFLI-CARRID
                          AND CONNID = WA_SPFLI-CONNID.

       SKIP.
       WRITE: / 'Date:', WA_SFLIGHT-FLDATE.
       WRITE: 20 'Book-ID', 40 'Smoker', 50 'Class'.
       ULINE.

       SUM = 0.
      CNT = 0.
      LOOP AT TAB_SBOOK INTO WA_SBOOK
                        WHERE CARRID = WA_SFLIGHT-CARRID
                          AND CONNID = WA_SFLIGHT-CONNID
                          AND FLDATE = WA_SFLIGHT-FLDATE.

         WRITE: / WA_SBOOK-BOOKID UNDER 'Book-ID',
                 WA_SBOOK-SMOKER UNDER 'Smoker',
                 WA_SBOOK-CLASS  UNDER 'Class'.

                 SUM = SUM + WA_SBOOK-LUGGWEIGHT.
                 CNT = CNT + 1.

      ENDLOOP.

      ULINE.
       WRITE: 'Number of bookings:  ', (3) CNT,
           / 'Total luggage weight:',
          (3) SUM, WA_SBOOK-WUNIT.

    ENDLOOP.

  ENDLOOP.

このプログラムでは、書式設定データの例の場合と同じ一覧が作成されます。

データを取得する GET イベントは、ソートプロセスと明確に分離しています。3 つの内部テーブルは、対応するデータベーステーブルとまったく同じ構造と内容を備えています。 データは格納後、表示されます。 このループ構造は、読込中のデータ書式設定の例にある SELECT ループのループ構造とまったく同じです。

ネスト内部テーブルによるデータ書式設定

 例

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

REPORT DEMO.

DATA: SUM TYPE I, CNT TYPE I.

NODES: SPFLI, SFLIGHT, SBOOK.

DATA: BEGIN OF WA_SBOOK,
        BOOKID     TYPE SBOOK-BOOKID,
        SMOKER     TYPE SBOOK-SMOKER,
        CLASS      TYPE SBOOK-CLASS,
        LUGGWEIGHT TYPE SBOOK-LUGGWEIGHT,
        WUNIT      TYPE SBOOK-WUNIT,
      END OF WA_SBOOK.

DATA: BEGIN OF WA_SFLIGHT,
        FLDATE TYPE SFLIGHT-FLDATE,
        SBOOK  LIKE TABLE OF WA_SBOOK,
      END OF WA_SFLIGHT.

DATA: BEGIN OF WA_SPFLI,
        CARRID   TYPE SPFLI-CARRID,
        CONNID   TYPE SPFLI-CONNID,
        CITYFROM TYPE SPFLI-CITYFROM,
        CITYTO   TYPE SPFLI-CITYTO,
        SFLIGHT  LIKE TABLE OF WA_SFLIGHT,
      END OF WA_SPFLI.

DATA TAB_SPFLI LIKE TABLE OF WA_SPFLI.

START-OF-SELECTION.

GET SPFLI.
  REFRESH WA_SPFLI-SFLIGHT.

GET SFLIGHT.
   REFRESH WA_SFLIGHT-SBOOK.

GET SBOOK.
   MOVE-CORRESPONDING SBOOK TO WA_SBOOK.
   APPEND WA_SBOOK TO WA_SFLIGHT-SBOOK.

GET SFLIGHT LATE.
   MOVE-CORRESPONDING SFLIGHT TO WA_SFLIGHT.
   APPEND WA_SFLIGHT TO WA_SPFLI-SFLIGHT.

GET SPFLI LATE.
   MOVE-CORRESPONDING SPFLI TO WA_SPFLI.
   APPEND WA_SPFLI TO TAB_SPFLI.

END-OF-SELECTION.

   SORT TAB_SPFLI BY CITYFROM CITYTO CONNID.

   LOOP AT TAB_SPFLI INTO WA_SPFLI.

    SKIP.
    WRITE: / WA_SPFLI-CARRID,
             WA_SPFLI-CONNID,
             'from', (15) WA_SPFLI-CITYFROM,
             'to',   (15) WA_SPFLI-CITYTO.

    ULINE.

     SORT WA_SPFLI-SFLIGHT BY FLDATE.

     LOOP AT WA_SPFLI-SFLIGHT INTO WA_SFLIGHT.

       SKIP.
       WRITE: / 'Date:', WA_SFLIGHT-FLDATE.
       WRITE: 20 'Book-ID', 40 'Smoker', 50 'Class'.
       ULINE.

       SORT WA_SFLIGHT-SBOOK BY CLASS SMOKER BOOKID.

       SUM = 0.
      CNT = 0.

       LOOP AT WA_SFLIGHT-SBOOK INTO WA_SBOOK.

         WRITE: / WA_SBOOK-BOOKID UNDER 'Book-ID',
                 WA_SBOOK-SMOKER UNDER 'Smoker',
                 WA_SBOOK-CLASS  UNDER 'Class'.

        SUM = SUM + WA_SBOOK-LUGGWEIGHT.
        CNT = CNT + 1.

      ENDLOOP.

      ULINE.
       WRITE: 'Number of bookings:  ', (3) CNT,
           / 'Total luggage weight:',
          (3) SUM, WA_SBOOK-WUNIT.

    ENDLOOP.

  ENDLOOP.

このプログラムでは、書式設定データの例の場合と同じ一覧が作成されます。

GET イベントの実行時には、下位構造 SFLIGHT とその下位構造 SBOOK を含む 3 レベルの内部テーブルSORT_SPFLI にデータが書き込まれます。ソートプロセスは、個々のネストレベルで行われます。

このプログラミングでは内部テーブル間のキー関係が不要ですが (WHERE 条件なし) 、フラット内部テーブルを使用した場合よりも複雑になります。内部の管理作業の増大は、必要な記憶域と実行時間にマイナスの影響を与えます。

 

 

 

 

 

コンテンツフレーム終了