🌷
実行時に発生したCPF5032 エラーの原因と解消
前提
- RPGLE(固定フォーム)
DSPF・RPGLE・CLファイルをコンパイルし、実行している際にエラーが発生した。
エラーメッセージ
ファイルTESTL02で入出力エラーCPF5032が見つかった。
エラーが発生したコード
FTESTL01 UF E K DISK RENAME(TESTRC:TSRC01)
FTESTL02 UF E K DISK RENAME(TESTRC:TSRC02)
(略)
C K#TSA CHAIN TESTL01 96
(略)
C K#TSB SETLL TESTL02
C K#TSB READE TESTL02 97
(略)
C UPDATE TSRC02 98
エラーの原因
ファイルタイプが U の場合は、CHAIN するとそのファイル(今回だとTESTL01の物理ファイル)にロックがかかり、そこに対して UPDATEしてはじめてロックが解除される。
上記の例だと、 CHAIN したのに UPDATE する前に同じファイルに対して READE しようとしている。
つまり、エラーが発生したのはCHAIN の行でロックされているファイルに対して、重ねて READE → UPDATE しようとしたためである。
ファイルをロックしたくないときは CHAIN(N)にする必要がある。
正しいコード
FTESTL01 UF E K DISK RENAME(TESTRC:TSRC01)
FTESTL02 UF E K DISK RENAME(TESTRC:TSRC02)
(略)
C K#TSA CHAIN(N) TESTL01 96
(略)
C K#TSB SETLL TESTL02
C K#TSB READE TESTL02 97
(略)
C UPDATE TSRC02 98
Discussion