COBOL2002 ユーザーズガイド


付録H 入出力状態の値

入出力状態の値が表す内容を,次に示します。

表H‒1 入出力状態の値

条件

入出力状態の値

順編成ファイル,相対編成ファイル,

索引編成ファイルの場合

HiRDBによる索引編成ファイルの場合

COBOL入出力サービスルーチンの場合

成功

00

入出力文の実行が成功した。その入出力動作に関しては,これ以上情報がない。

02

入出力文の実行は成功したが,重複キーが検出された。

  1. READ文で読み込んだレコードキーの参照キーの値が,その索引での次のレコードの参照キーと等しい。

  2. REWRITE文,またはWRITE文によって指定されたレコードの副レコードキーの値が,すでにファイルにある。ただし,この副レコードキーは重複した値が許されているので,誤りではない。

×

×

04

READ文の実行は成功した。しかし,処理したレコードの長さが,そのファイルのファイル固有属性に従っていない(テキスト編成ファイルだけ)。

または,CSV編成ファイルから入力した一つのセルの文字列長が,入力領域より長い。

×

05

OPEN文の実行は成功した。しかし,OPEN文を実行したとき,参照した不定ファイルはない。OPEN文のモードが入出力両用,または拡張ならば,ファイルは生成される。

(入力モードの場合だけ)

×

07

入出力文の実行は成功した。ただし,REEL/UNIT指定のCLOSE文で参照したファイルが非リール/ユニットの媒体上にある(順編成ファイルだけ)。

×

ファイル終了

10

順アクセスのREAD文を実行しようとしたが,次のレコードがない。次の場合のどちらかである。

  1. ファイルの終わりに達した。

  2. 存在しない不定入力ファイルに対して,順アクセスのREAD文を初めて実行しようとした。

(1.の場合だけ)

14

相対編成ファイルに対して順アクセスのREAD文を実行しようとしたが,相対レコード番号の有効けた数がそのファイルの相対キーデータ項目のサイズよりも大きい(相対編成ファイルだけ)。

(相対編成ファイルの場合だけ)

無効キー

21

順アクセスで,順序誤りがあった。成功したREAD文と次のREWRITE文の間で主レコードキーの値が変更されたか,またはWRITE文の実行時に主レコードキーの値が昇順になっていない(索引編成ファイルだけ)。

×

22

重複キーがあった。

  1. すでにレコードがある位置に,重ねてWRITE文でレコードを書き出そうとした(相対編成ファイルだけ)。

  2. WRITE文,またはREWRITE文で索引編成ファイルに書き出そうとしたレコードの主レコードキー,または副レコードキーの値が,すでにファイル中にある。ただし,この副レコードキーには,DUPLICATESが指定されていない(索引編成ファイルだけ)。

(2.の場合だけ)

(相対編成ファイルで1.の場合だけ)

23

次の場合のどちらかである(相対編成ファイル,および索引編成ファイル)。

  1. 物理ファイル中に存在しないレコードをランダムに呼び出そうとした。

  2. 存在しない不定入力ファイルに対してSTART文,または乱アクセスのREAD文を,実行しようとした。

(相対編成ファイルの場合だけ)

24

次の場合のどれかである。

  1. COBOLの外部で定義されたファイルの区域外に書き出そうとした。区域の定め方は,作成者が決める(相対編成ファイル,および索引編成ファイル)。

  2. 順アクセスのWRITE文を実行しようとしたが,そのレコードの相対レコード番号の有効けた数がそのファイルの相対キーデータ項目より大きい(相対編成ファイルだけ)。

  3. 乱アクセスのWRITE文を実行しようとしたが,その相対レコード番号が0以下である(相対編成ファイルだけ)。

(1.の場合だけ)

(相対編成ファイルの場合だけ)

永続誤り

30

永続誤りがある。次のどれかである。

  1. 順固定長ファイルから入力した最後のレコードの長さが,レコード長より短い。

  2. 順固定長ファイルに標準入力(stdin)を割り当てた場合,入力したレコードの長さがレコード長より短い(最大レコード長と最小レコード長の範囲外の値が設定されている)。

  3. 相対可変長ファイルのレコード領域が破壊されている。

  4. 相対編成ファイルのスロットが破壊されている。有効,無効レコードの識別ができない。

  5. 入出力両用モードで開かれたテキスト編成ファイルに対してREAD文を実行したが,入力したテキスト行がプログラム中で定義したレコード領域より長い。

  6. 特定のファイルを指定し,OPEN文が成功したが,そのあと入出力矛盾が発生した(ファイル破壊を検出した場合など)。

  7. 相対編成ファイルで,最大レコード長および最小レコード長の範囲を超えている。

ファイル位置指示子が不定となっている。例えば,COMMIT文,ROLLBACK文の実行によってファイル位置指示子が有効なレコードを指していない。

(相対編成ファイルで,3.,4.の場合だけ)

34

区域外書き出しによる永続誤りがある。

COBOLの外部で定義されたファイルの区域外にレコードを書き出そうとした(順編成ファイルだけ)。

35

次の場合のどちらかである。

  1. 不定ファイルでないファイルがないとき,INPUT指定,I-O指定,またはEXTEND指定を持つOPEN文を実行しようとしたことによる永続誤りがある。

  2. ISAMによる索引編成ファイルで,指定した物理ファイルと実行時環境変数CBLISAMLARGE,またはCBLD_ファイル名で指定したファイルの形式が異なっている。

(1の場合だけ)

(1の場合だけ)

37

OPEN文を実行しようとしたが,指定されたファイルが,そのOPEN文で指定されたモードを使えない。

次の場合のどれかである。

  1. EXTEND指定,またはOUTPUT指定が指定されていたが,そのファイルでは出力動作が使えない。

  2. I-O指定が指定されていたが,そのファイルでは,入出力両用モードで開かれている順編成ファイル/相対編成ファイル/索引編成ファイルに対して許される入出力動作が使えない。

  3. INPUT指定が指定されたが,そのファイルでは入力動作が使えない。

  4. OUTPUT指定以外が指定されたが,書式印刷機能でプリンタの出力動作が使えない。

×

(1.,2.,および3.の場合だけ)

38

施錠して閉じたファイルに対して,OPEN文を実行しようとしたことによる永続誤りがある。

×

39

ファイル固有属性とプログラム中で指定した属性との間で矛盾が検出されたため,OPEN文が不成功になった。

×

論理誤り

41

開かれているファイルにOPEN文を実行しようとした。

42

開かれていないファイルにCLOSE文を実行しようとした。

43

順アクセスで,DELETE文,またはREWRITE文を実行する前に,関連するファイルに対して実行された最後の入出力文が,成功したREAD文でない。

44

次のどちらかの条件で,区域外書き出しが起こった。

  1. 関連するファイル名のRECORD IS VARYING句によって許される最大のレコードより大きい,または最小のレコードより小さいレコードを書き出そうとした,または書き換えようとした。

  2. レコードを書き換えようとしたが,そのレコードは,書き換えられるレコードと同じサイズでない。

(1.の場合だけ)

※1

46

入力モードまたは入出力両用レコードで開かれたファイルに順アクセスのREAD文を実行しようとしたが,有効な次のレコードがない。次の場合のどれかである。

  1. 先行するSTART文が不成功であった。

  2. 先行するREAD文が,ファイル終了条件によって不成功であった。

  3. 先行するREAD文が,ファイル終了条件を引き起こした。

(1.は相対編成ファイルの場合だけ)

47

入力モード,または入出力両用モードで開かれていないファイルに,READ文,またはSTART文を実行しようとした。

48

正しいオープンモードでは開かれていないファイル結合子に対して,WRITE文を実行しようとした。次の場合のどちらかである。

  1. 順アクセス法の場合,拡張モードや出力モードで開かれていないファイル結合子にWRITE文を実行しようとした。

  2. 動的アクセス法や乱アクセス法の場合,入出力両用モード,出力モード,または拡張モードで開かれていないファイル結合子にWRITE文を実行しようとした。

49

入出力両用モードで開かれていないファイルに,DELETE文,またはREWRITE文を実行しようとした。

作成者規定

90

入出力文の実行時,実行できない状態になった。

次のどれかである。

  1. 入出力に必要なメモリが不足した。

  2. ファイルにフォルダが指定された。

  3. CBL_外部装置名で示される環境変数がない。

  4. 1プロセス内でオープンできるファイル数の上限を超えた。

  5. CLOSE文実行時,バッファに残っていた内容をファイルに書き出すとき,大容量の記憶ファイルの許容範囲を超えた。

  6. ファイル名指定に誤りがある。

  7. 同時に施錠できるレコード数の上限を超えた。

  8. 索引編成ファイルに対して2GB以上のファイル入出力を実行した。※2

  9. ノーマルファイル形式の索引編成ファイルに対して2GB以上のファイル入出力を実行した。※3

  10. ラージファイルに対応したISAMがインストールされていない。※3

  11. ISAMのライブラリが検索パス上に存在しない。

  12. ライブラリロード中にエラーが発生した。

  13. 環境変数CBLEUDCFUNCにERRORSTOPを指定した環境で,GDIモード印刷またはESC/Pモード印刷のOPEN文を実行時にEnableEUDC関数がエラーを返した。

※4

※5

92

入出力文の妥当でない使い方によって実行が不成功になった。

  1. レコード長がDEPENDING ON指定で指定されている場合,指定されたデータ名中の値が数字以外である。

  2. レコード番号が処理できる最大値を超えた(相対編成ファイルだけ)。

  3. 開かれていないファイルにUNLOCK文を実行しようとした。

(1.,および3.の場合だけ)

※6

93

次の場合のどちらかである。

  1. OPEN文を実行しようとしたが,該当ファイルまたは該当ファイル中のレコードはすでに使用されている。

  2. 書式印刷機能を使用するとき,プリンタはすでに使用されている。

×

(1.の場合だけ)

98

該当せず。

出力モード指定,または不定ファイルに対応する入出力両用,拡張モード指定のOPEN文を実行しようとしたが,ファイルがなかった。

×

99

入出力文(OPEN文,CLOSE文を除く)を実行しようとしたが,該当レコードはすでに使用されている。

×

(凡例)

○:標準仕様と同じ

×:値は返されない

−:該当しない

注※1

2.,および次の場合に該当する。

  • ファイルオープン時に指定した最大のレコードより大きい,または最小のレコードより小さいレコードを書き出そうとした,または書き換えようとした。

注※2

Windows(x64) COBOL2002で有効です。

注※3

Windows(x86) COBOL2002で有効です。

注※4

1.〜6.,および次の場合に該当する。

  • 副レコードキーの個数が,98を超えている。

  • データが不正である。

  • HiRDBシステムがデッドロックやタイムアウトなどのエラーを検知した。

注※5

1.,2.,4.,5.,6.,7.,および次の場合に該当する。

  • サービスルーチンに指定したパラメタインタフェース領域に誤りがある。

  • サービスルーチンで取り扱えないファイル名を指定した。

  • COBOL実行時ライブラリが組み込まれていない。

  • 入出力のためのシステム関数でエラーが発生した。

注※6

2.,3.,および次の場合に該当する。

  • 指定できないファイル編成,およびアクセス法でCBLSTARTサービスルーチンを実行した。

  • 指定できないファイル編成,およびアクセス法でNEXT指定のCBLREADサービスルーチンを実行した。

  • 指定できないファイル編成,およびアクセス法でKEY指定のCBLREADサービスルーチンを実行した。

  • 指定できないファイル編成でCBLDELETEサービスルーチンを実行した。

  • 順ファイルに対してLOCK MODE MANUALの指定をした。

  • 開かれていないファイルに対してCBLWDISKサービスルーチンを実行した。