最適化のため、作業リストを用います。最初にSTATESファイルの内容を作業リストに読み込んでしまい、FETCHコマンドをLOC_ENTRYコマンドに置き換えることにより、毎回データベースにアクセスする代わりに、作業リストから状態コードの説明記述を取得するよう変更しました。
GROUP_BY NAME(#TRANS) FIELDS(#TRANNUM #TRANDATE #TRANTIME
#TRANTYPE #TRANDESC #TRANUSER #TRANSTATE #STATDESC)
DEF_LIST NAME(#STATES) FIELDS(#STATCODE #STATDESC)
TYPE(*WORKING) ENTRYS(10)
SELECT FIELDS(#STATES) FROM_FILE(STATES)
ADD_ENTRY TO_LIST(#STATES)
ENDSELECT
SELECT FIELDS(#TRANS) FROM_FILE(TRANS)
LOC_ENTRY IN_LIST(#STATES) WHERE('#STATCODE = #TRANSTATE')
FETCH FIELDS(#TRANS) FROM_FILE(TRNTYP)
WITH_KEY(#TRANTYPE)
UPRINT FIELDS(#TRANS)
ENDSELECT
例えばファイルTRANSに1万のレコード、ファイルSTATESには6つのレコードがある場合、データベースには、(10000 + 6 + 10000) = 20006回アクセスすればよいので、9994回分の入出力処理を削減できたことになります。したがって実行時間は約3分の2になりました。