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コマンド戻りコード表