13.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ファイルにないため、このコマンドで変更されることはなく無視されます。
さらに、次のトピックも参照してください。