レコードのロック

レコードがプログラムによって読み取られる時には、入力または更新の 2 つの モードのいずれかで読み取られます。 プログラムが更新用にレコードを読み取る場合には、そのレコードは ロック状態になります。 最初のプログラムがそのロックを解除するまで、別のプログラムが更新用に同 じレコードを読み取ることはできません。 プログラムが入力用にレコードを読み取る場合には、そのレコードは ロック状態になりません。 あるプログラムによってロックされたレコードは、別のプログラムによって入 力用に読み取ることは可能です。

RPG IV プログラムでは、更新用のレコード読み取りには更新ファイルを使います。更新以外のタイプのファイルから読み取るレコードは、照会用にしか読み取 ることはできません。 デフォルトでは、更新ファイルから読み取られるレコードはすべて、更新用に 読み取られます。 更新ファイルの場合には、入力命令 CHAIN、READ、READE、READP、または READPE の 1 つを使用し、命令コード・フィールドの命令コード名の次に 命令コードの拡張 (N) を指定して、レコードが入力用に読み取られるように指定す ることができます。

レコードが RPG IV プログラムによってロックされている時は、次のいずれかが起こるまでそのロックが続きます。

プログラムが更新用にレコードを読み取り、そのレコードがジョブ内の別の プログラムまたは別のジョブによってロックされた場合には、その読み取り命令は レコードのアンロックされるまで待機します (共用ファイルの場合は除きま す。オープン・データ・パスの共用を参照してください。)待機時間がファイルの WAITRCD パラメーターで指定された値を超えている場合 には、例外が起こります。 プログラムがこの例外を処理していない場合には、レコード・ロックの タイムアウトが起こった時にデフォルトのエラー処理プログラムが制御を受け取り、 RNQ1218 照会メッセージが出されます。 このメッセージにリストされたオプションの 1 つは、タイムアウトが起こった 命令の再試行です。 これにより、タイムアウトが起こった命令が再び出され、レコード・ロックの タイムアウトが起こらなかったかのようにプログラムが続行できるようになり ます。 ファイルに INFSR の指定があり、デフォルトのエラー処理プログラムが制御を受け 取る前に INFSR 内でファイルの入出力操作が実行される場合には、ファイルの カーソルが変更されている可能性があるために、再試行される操作が順次操作 の場合は、予期しない結果が起こることがあることに注意してください。

注:
サブプロシージャーは、照会メッセージを受け取らないので、この状況 は読み取り命令のエラー標識を使用し、読み取りの後の状況 1218 について検査す ることによって処理する必要があります。

ロックされたレコードに変更が必要でない場合には、ファイルのカーソルを変 更せずに、UNLOCK 命令を使用するか、またはフィールド名のない出力仕様書を 処理することによって、そのレコードをロック状態から解除することができま す。 これらの出力命令は、EXCEPT 出力、明細出力、または合計出力によって処理す ることができます。

(コミットメント制御の下で操作する時には、これらの規則に例外があります。 詳細については、コミットメント制御の使用を参照してください。)