レコードが ロックされているI/O状況
前述の戻りコード に加え、システム変数*DBMS_RECORD_LOCKEDを使用して、レコードがロックされているI/Oエラー状況とその他のI/Oエラーを区別する ことができます。
次の例では、エラーが発生した場合、およびコマンドが成功したときにGOTO NXTがIF条件をバイパスした場合にIO_ERRORパラメータがラベルTSTにどのように制御を渡すかを示しています。
UPDATE FIELDS(#ORDERQTY) IN_FILE(ORDLINE)
WITH_KEY(#ORDER #LINE) IO_ERROR(TST)
GOTO LABEL(NXT)
TST IF COND('*DBMS_RECORD_LOCKED *EQ Y')
MESSAGE MSGTXT('Order line record locked')
........ ..Required action
ELSE
ABORT MSGTXT('Fatal I/O error on ORDERLINE file')
ENDIF
NXT ....... ..Next action
コメント/警告
リリース7.0より前にコンパイルされたファイルでこの方法を使用する場合、最初にI/Oモジュールを再コンパイルする必要があります。
IO_ERRORパラメータは指定のラベルに制御を渡すため、 条件には、上記の例のように、レコードがロックされていないI/Oエラーを処理するための適切なアクションが指定されたELSEコマンドが必ず必要です。
DBMS_RECORD_LOCKEDでは、コマンドの処理対象であるファイルの状況だけがチェックされます。上記の例でバッチ制御ロジックが使用されて いて、バッチ制御レコードがロックされた場合、*DBMS_RECORD_LOCKEDは値Nを戻します。同じことがトリガーによって使用されるファイル にも当てはまります。トリガーによって使用されるファイルに対して、レコードのロック状況をチェックする場合、上記のロジックをトリガー・ファンクション に挿入する必要があります。
移 植性に関する考慮事項 |
IBM i:一定の時間がたつと、自動的にファイルをアンロックします。 |