ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

FILEERROR

FILEERRORファンクションは、データ読取り文FILEREADおよびFILEVIEWを使用した入力ファイルからのレコードの処理時に発生した最初のエラーに関する情報を返します。これによって、発生したエラーのタイプとOracle OLAPが読み取ろうとしていたレコードの位置がわかります。引数として指定するキーワードによって、返される情報の種類が決まります。

FILEERRORをコールしてエラーのタイプを確認します。次に、再びFILEERRORをコールしてエラーの原因に関する詳細を取得します。エラーのタイプに関する戻り値は、FILEERRORのキーワードでもあります。FILEERRORがNA以外の値を返した場合、2回目はその戻り値を引数としてFILEERRORをコールします。

FILEERRORの省略形はFILEERRです。

戻り値

指定したキーワードによって異なります。

構文

FILEERROR (TYPE|POSITION|WIDTH|VALUE|DIMENSION)

パラメータ

TYPE

発生したエラーのタイプを指定するテキスト式を返します。エラーのタイプとその意味を、表7-9「FILEERRORによって返されるエラーのタイプ」に示します。

表7-9 FILEERRORによって返されるエラーのタイプ

戻り値 意味

DIMENSION

データ読取り文がディメンションのステータスを設定(暗黙的または明示的なMATCH属性による)しようとしましたが、指定された位置または値が存在しませんでした。

NA

現行レコードの処理でエラーは発生しませんでした。

POSITION

データ読取りプログラムがレコードの無効な位置から読み取ろうとしました。フィールドまたは列がレコードの先頭より前にある場合、またはフィールドがレコードの末尾を超えて拡張される場合、POSITIONエラーが発生することがあります。レコードの末尾を超えるエラーは、バイナリ・データまたはパック・データの場合にのみ発生し、シンボリック(テキスト)データの場合、データ読取り文によって短いレコードが空白文字で埋められます。

VALUE

値を、要求されたデータ型に変換できませんでした。パック・データの場合、レコードに無効な16進数がありました。

WIDTH

データ読取り文が無効なフィールド幅を指定しました。無効な幅は、次のようにデータの形式(シンボリック、パックまたはバイナリ)によって異なります。

  • シンボリック形式の場合、1より小さい幅またはNAである幅が無効です。ただし、NAはIDデータに対しては許容されます。

  • パック形式の場合、1より小さい幅、8より大きい幅またはNAである幅が無効です。

バイナリ形式の場合、幅に関する要件はデータがINTEGERであるかDECIMAL(浮動小数点)であるかによって異なります。整数データは1、2または4の幅が必要です。小数データは4または8の幅が必要です。


POSITION

エラーが発生したときの列番号(ルール化レコード)またはフィールド番号(構造化レコード)であるINTEGERを返します。

WIDTH

現行フィールド幅であるINTEGERを返します。幅としてNAが指定されていた場合、またはエラーがPOSITIONエラーだった場合、NAが返されます。POSITIONエラーでは、幅が評価される前に処理が停止されます。

VALUE

エラー・タイプがVALUEである場合、変換されなかった値であるテキスト式を返します。パック・データの場合、無効な値が16進エスケープとして示されます。エラー・タイプがDIMENSIONである場合、既存のディメンション値と一致しなかった値を返します。他のエラー・タイプの場合、NAを返します。

DIMENSION

エラー・タイプがDIMENSIONだった場合、一致するディメンション値がなかったディメンションの名前であるテキスト式を返します。他のエラー・タイプの場合、NAを返します。

使用上の注意

制御のフロー

FILEREADまたはFILEVIEWでエラーが発生すると、現行レコードの処理が停止され、該当するエラー・メッセージが表示されます。次に、プログラムにトラップ・ラベルがある場合、問題を調査するためにFILEERRORをコールするラベルに制御が分岐します。FILEREADまたはFILENEXTファンクションに分岐して戻ると、次のレコードの処理が続行されます。そのレコードにさらにエラーがある場合、それらのエラーは評価されません。

現行の出力ファイルでのエラー・メッセージの表示

現行の出力ファイルにエラー・メッセージが表示されるようにするには、データ読取りプログラムでECHOPROMPTをYESに設定します。FILEREADまたはFILEVIEWでエラーが発生した場合、エラー・メッセージの後にFILEERRORによる評価が行われます。

例7-88 TRAPによるエラー処理

この例では、トラップ・ラベル(ERROR:)のサンプルとそれに続くエラー処理コードを示します(エラー・トラッピングおよびトラップ・ラベルについては、 TRAP コマンドを参照)。(エラー・トラッピングおよびトラップ・ラベルについては、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