13.5 RDML I/O戻りコード
ほとんどのLANSAデータベース・コマンドは、完了したときに「戻りコード」を発行します。この戻りコードは必ず#IO$STSと呼ばれるフィールドにマッピングされ、他のフィールドと同様に条件ステートメントで使用することができます。戻りコードはユーザー定義のフィールドにマッピングすることもできます。マッピング方法については、必要なコマンドのIO_STATUSパラメータを参照してください。
ただし、通常の商用ファンクションにおいては、すべてのファンクションで、致命的なエラーが発生したときに自動でエラー処理を実行してエラーに対処する方法を採用する必要があります。I/O操作が正常に動作したか、正常に動作しなかった(動作しなかった場合は、戻りコードではなくメッセージにより理由が示されます)かが示されます。
すべてのI/O戻りコードの値とその意味を以下のリストに示します。
戻りコード | 記述/意味 |
|---|---|
OK | OK 操作が正常に終了しました。エラーは見つかりませんでした。 |
ER | 致命的なエラー 致命的なエラーが見つかりました。エラーは回復できない可能性があります。問題の原因を究明、修正して、再度操作を試みてください。 当章に、ロックされたレコードのI/Oステータスを掲載したセクションがあります。そちらも参照してください。 |
VE | 妥当性検査エラー 挿入、更新、または削除操作においてファイルまたはディクショナリ・レベルの妥当性検査に失敗しました。 |
NR | レコードなし 要求に合致するレコードを見つけることができませんでした。 |
EF | ファイルの終わり 読み込み操作でファイルの終わりが見つかりました。 |
BF | ファイルの先頭 逆方向読み込みでファイルの先頭が見つかりました。 |
EQ | 同一キーが見つかった ファイルに指定したキーと同じキーを持つレコードが見つかりました。 |
NE | 同一キーが見つからなかった 指定したキーと同じキーを持つレコードを見つけることができませんでした。 |
I/O操作の完了後に実施する戻りコードの検査にはさまざまな方法があります。
1つ目は、常にI/Oコマンドのデフォルト・パラメータであるIO_STATUS(*STATUS)を使用する方法です。この場合、戻りコードは#IO$STSと呼ばれるフィールドにマッピングされます。そしてこの#IO$STSは他のフィールドと同様に参照することができます。例えば、以下のようになります。
FETCH FIELDS(#ORDERHEAD) FROM_FILE(ORDHDR) WITH_KEY(#ORDER)
IF COND('#IO$STS *NE OK')
MESSAGE MSGTXT('Order not found in current order file')
ENDIF
2つ目は、IO_STATUSパラメータを使って戻りコードをユーザー定義のフィールドにマッピングする方法です。例えば、以下のようになります。
DEFINE FIELD(#RETCODE) TYPE(*CHAR) LENGTH(2)
FETCH FIELDS(#ORDERHEAD) FROM_FILE(ORDHDR) WITH_KEY(#ORDER)
IO_STATUS(#RETCODE)
IF COND('#RETCODE *NE OK')
MESSAGE MSGTXT('Order not found in current order file')
ENDIF
3つ目は、IF_STATUSコマンドを使って最新の戻りコードを自動で検査する方法です(これが最適だと考えられます)。上記例は以下のようになります。
FETCH FIELDS(#ORDERHEAD) FROM_FILE(ORDHDR) WITH_KEY(#ORDER)
IF_STATUS IS_NOT(*OKAY)
MESSAGE MSGTXT('Order not found in current order file')
ENDIF
詳細と例については、、「IF_STATUSコマンド」を参照してください。