大量のデータ更新を RPG で行なう場合、数時間もかかる処理を数分の一に
短縮できる方法はあるだろうか?
ここではその1つの例として、CHAIN命令を LOKUPに置き換える手法を示す。
CHAINでアクセスしている担当者マスター(TANTO) はせいぜい 500レコードである。
メインのファイル FILE が数十万件ある場合には、このCHAIN によるオーバーヘッドの影響は大きい。
最初に TANTOを配列に読みこんでしまって、LOKUPを使用すれば驚くほど処理時間は短縮される。
【変更前の低速なバッチPGM】
ソースコード
0001.00 H Y/ 0002.00 F********** 変更前の低速バッチPGM ***************************** 0003.00 FFILE IF E K DISK 0004.00 FTANTO IF E K DISK 0005.00 F************************************************************* 0006.00 C DO *HIVAL 0007.00 C SETOF 50 0008.00 C READ FILE 50 0009.00 C 50 LEAVE 0010.00 C TANKEY CHAINTANTO 90 0011.00 C*----------------------------------------------------+ 0012.00 C UPDATFILER | 0013.00 C*----------------------------------------------------+ 0014.00 C END
【変更後の高速バッチPGM】
0001.00 H Y/ 0002.00 F********** 変更後の高速バッチPGM **************************** 0003.00 FFILE IF E K DISK 0004.00 FTANTO IF E K DISK 0005.00 F**************************************************************** 0006.00 E CDR 500 4 CODE * 500 0007.00 E NMR 500 20 NAME * 500 0008.00 C 1 DO *HIVAL N 40 0009.00 C READ TANTO 50 0010.00 C 50 LEAVE 0011.00 C MOVE CODE CDR,N 0012.00 C MOVE NAME NMR,N 0013.00 C END 0014.00 C* 0015.00 C DO *HIVAL 0016.00 C SETOF 50 0017.00 C READ FILE 50 0018.00 C Z-ADD1 N 0019.00 C TANKEY LOKUPCDR,N 50 0020.00 C 50 MOVE NMR,N NAME 0021.00 C 50 LEAVE 0022.00 C*----------------------------------------------------+ 0023.00 C UPDATFILER | 0024.00 C*----------------------------------------------------+ 0025.00 C END