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コマンド」を参照してください。

参照 

I/Oコマンド戻りコード表

  • No labels