FILEERRORファンクションは、データ読取り文FILEREADおよびFILEVIEWを使用した入力ファイルからのレコードの処理時に発生した最初のエラーに関する情報を返します。これによって、発生したエラーのタイプとOracle OLAPが読み取ろうとしていたレコードの位置がわかります。引数として指定するキーワードによって、返される情報の種類が決まります。
FILEERRORをコールしてエラーのタイプを確認します。次に、再びFILEERRORをコールしてエラーの原因に関する詳細を取得します。エラーのタイプに関する戻り値は、FILEERRORのキーワードでもあります。FILEERRORがNA以外の値を返した場合、2回目はその戻り値を引数としてFILEERRORをコールします。
FILEERRORの省略形はFILEERRです。
戻り値
指定したキーワードによって異なります。
構文
FILEERROR (TYPE|POSITION|WIDTH|VALUE|DIMENSION)
引数
発生したエラーのタイプを指定するテキスト式を返します。エラーのタイプとその意味を、表7-9「FILEERRORによって返されるエラーのタイプ」に示します。
表7-9 FILEERRORによって返されるエラーのタイプ
| 戻り値 | 意味 |
|---|---|
|
DIMENSION |
データ読取り文がディメンションのステータスを設定(暗黙的または明示的なMATCH属性による)しようとしましたが、指定された位置または値が存在しませんでした。 |
|
NA |
現行レコードの処理でエラーは発生しませんでした。 |
|
POSITION |
データ読取りプログラムがレコードの無効な位置から読み取ろうとしました。フィールドまたは列がレコードの先頭より前にある場合、またはフィールドがレコードの末尾を超えて拡張される場合、POSITIONエラーが発生することがあります。レコードの末尾を超えるエラーは、バイナリ・データまたはパック・データの場合にのみ発生します。シンボリック(テキスト)データの場合、データ読取り文によって短いレコードが空白文字で埋められます。 |
|
VALUE |
値を、要求されたデータ型に変換できませんでした。パック・データの場合、レコードに無効な16進数字があったことを意味します。 |
|
WIDTH |
データ読取り文が無効なフィールド幅を指定しました。無効な幅は、次のようにデータの形式(シンボリック、パックまたはバイナリ)によって異なります。
バイナリ形式の場合、幅に関する要件はデータが |
エラーが発生したときの列番号(ルール化レコード)またはフィールド番号(構造化レコード)であるINTEGERを返します。
現行フィールド幅であるINTEGERを返します。幅としてNAが指定されていた場合、またはエラーがPOSITIONエラーだった場合、NAが返されます。POSITIONエラーでは、幅が評価される前に処理が停止されます。
エラー・タイプがVALUEである場合、変換されなかった値であるテキスト式を返します。パック・データの場合、無効な値が16進エスケープとして示されます。エラー・タイプがDIMENSIONである場合、既存のディメンション値と一致しなかった値を返します。他のエラー・タイプの場合、NAを返します。
エラー・タイプがDIMENSIONだった場合、一致するディメンション値がなかったディメンションの名前であるテキスト式を返します。他のエラー・タイプの場合、NAを返します。
注意
制御のフロー
FILEREADまたはFILEVIEWでエラーが発生すると、現行レコードの処理が停止され、該当するエラー・メッセージが表示されます。次に、プログラムにトラップ・ラベルがある場合、問題を調査するためにFILEERRORをコールするラベルに制御が分岐します。FILEREADまたはFILENEXTファンクションに分岐して戻ると、次のレコードの処理が続行されます。そのレコードにさらにエラーがある場合、それらは評価されません。
現行の出力ファイルでのエラー・メッセージの表示
現行の出力ファイルにエラー・メッセージが表示されるようにするには、データ読取りプログラムでECHOPROMPTをYESに設定します。FILEREADまたはFILEVIEWでエラーが発生した場合、エラー・メッセージの後にFILEERRORによる評価が行われます。
例
例7-88 TRAPによるエラー処理
この例では、トラップ・ラベル(ERROR:)のサンプルとそれに続くエラー処理コードを示します(エラー・トラッピングおよびトラップ・ラベルについては、TRAPコマンドを参照)。このコードはファイルが開かれているかどうかをチェックします。開かれている場合、分岐の原因になったエラーがデータ読取りエラーであるかどうかをチェックします。その場合、プログラムはSHOWコマンドでFILEERRORをコールしてエラーに関する情報を表示します。ここには示されていないプログラムの本体には、ファイルを開いてファイル・ユニット番号を変数fil.unitに割り当てるコードが含まれます。ERRTYPEはプログラムの先頭で宣言されているローカル変数です。
error:
IF fil.unit EQ NA
THEN DO
POPLEVEL 'save'
RETURN
DOEND
IF ERRORNAME NE 'attn'
THEN DO
ERRTYPE = FILEERROR(TYPE)
IF ERRTYPE NE NA
THEN SHOW JOINCHARS('Error in record ' RECNO(fil.unit) -
' in column ' FILEERROR(POSITION) ': ' -
ERRTYPE ' ' FILEERROR(&ERRTYPE))
TRAP ON ERROR
GOTO NEXT
DOEND
FILECLOSE fil.unit
POPLEVEL 'save'
RETURN