🌷

実行時に発生した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 の行でロックされているファイルに対して、重ねて READEUPDATE しようとしたためである。
ファイルをロックしたくないときは 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