14.1.2 フィールド・グループおよび拡張可能なグループ

GROUP_BYコマンドを使って1つまたは複数のフィールドを共通の名前の下でグループ化します。これはRDMLコマンドの中で最も時間を節約できるコマンドの1つです。このコマンドを使用すれば、多くのフィールド名が羅列されたリストを繰り返し指定する必要がなくなります。

また、パラメータにフィールド名のリストが必要なコマンドについても、そのほとんどでグループ名の指定が許されます。次の例を検討してみましょう。 

     BEGIN_LOOP
REQUEST    FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)
INSERT     FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)
          TO_FILE(A)
INSERT     FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)
          TO_FILE(B)
UPRINT     FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)
CHANGE     FIELD(#ORDLIN #PRODUCT #QUANTITY #PRICE)
          TO(*DEFAULT)
END_LOOP

ここで、GROUP_BYコマンドを使ってすべてのフィールドを共通の名前でグループ化するように書かれた同じRDMLプログラムを見てみましょう。 

     GROUP_BY   NAMED(#ORDERLINE) FIELDS(#ORDLIN #PRODUCT #QUANTITY
                                   #PRICE)
BEGIN_LOOP
REQUEST    FIELDS(#ORDERLINE)
INSERT     FIELDS(#ORDERLINE) TO_FILE(A)
INSERT     FIELDS(#ORDERLINE) TO_FILE(B)
UPRINT     FIELDS(#ORDERLINE)
CHANGE     FIELD(#ORDERLINE) TO(*DEFAULT)
END_LOOP

新たな5個のフィールドをRDMLプログラムに追加する場合、変更はどちらが容易でしょうか。 

グループとGROUP_BYコマンドに関する注意点を以下に示します。

  • 必要なだけのGROUP_BYコマンドを定義することができます。
  • 1つのフィールドを複数のGROUP_BYコマンドのFIELDSパラメータで定義することができます。
  • 通常、フィールド名のリストを指定できる場所であればどこでもGROUP_BY名を使用することができます。
  • 以下のようにGROUP_BY名を定義します。
     GROUP_BY   NAMED(#ORDERHEAD) FIELDS(#ORDER #CUSTNO #ADDR1
                                       #ADDR2
                                       #POSTCD)

次に以下のように使用します。

      FETCH      FIELDS(#ORDERHEAD) FROM_FILE(ORDHED)
    FETCH      FIELDS(#ORDERHEAD) FROM_FILE(CUSMST)

1番目のFETCHでは、グループ内のフィールドでORDHEDファイルにあるものだけが取得されます。この場合では#ORDERと#CUSTNOだけが取り出されます。グループ内の他のフィールドはORDHEDファイルにないため、このコマンドで変更されることはなく無視されます。

2番目のFETCHでは、#CUSTNO(再取得)、#ADDR1、#ADDR2、および#POSTCDが取得されます。これらのフィールドがすべてCUSMSTファイルにあるためです。#ORDERフィールドはCUSMSTファイルにないため、このコマンドで変更されることはなく無視されます。 

さらに、次のトピックも参照してください。 

拡張可能グループ

拡張可能なグループに関する特記事項

拡張可能なグループ式

拡張可能なグループの例

  • No labels