RPG

427. ILE-RPGで2回目の実行がおかしくなったら?

最近次のような障害を聞くことがある。

①1回目のILE-RPGプログラム実行では正しいのだが
続けて2回目を実行すると障害が発生したり
2回目の実行がうまく行かないことが多い。

②1回目のILE-RPGプログラム実行の速度と
2回目の実行の速度がかなりちがう。

というような障害が発生しているらしい。
このほとんどの原因はILE-RPGのコンパイルの方法が
間違っていることに原因がある。

活動化グループの指定が誤っている

[誤まったコンパイルの方法]

CRTBNDRPG OBJLIB/MYPGM SRCFILE(MYSRCLIB/QRPGLESRC)

…このコンパイルでは省略時の活動化グループが
IBM が定める QILE という明示的な名前の活動化グループとして
コンパイルされてしまう。
結果的にどうなるかというとこのプログラムでいくら

SETON LR して終了してもプログラムはCPUノメモリーに
残ったままであり次回に呼び出されると *INZSR ルーチンは
実行されることがなく動作を始めてしまう。

従って2回目の実行では *INZSR で記述されているロジックは
実行されないので期待とは異なる動きになってしまう。

米国ではこのことはIBMユーザーに雑誌などで
よく知られているが日本のユーザーでは
まだまだ知っている人は少ないようだ。

[正しいコンパイルの方法]

CRTBNDRPG PGM(OBJLIB/MYPGM) SRCFILE(MYSRCLIB/QRPGLESRC) DFTACTGRP(*NO)
ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)

[解説]

活動化グループの指定は必ず

DFTACTGRP(*NO) ACTGRP(*NEW)

を明示的に指定すること。
ソース・デバッグを可能にするためには

 

DBGVIEW(*SOURCE)

にする必要がある。
権限に制限されないように

AUT(*ALL)

も必要である。
これが正しいILE-RPGのコンパイル手法である。