12.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コマンド」を参照してください。
参照
I/Oコマンド戻りコード表