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