社内SEの徒然なる日記

NetCOBOLのエラー事例

NetCOBOLを使っていて発生したエラーの内容と、対応事例集です。

実行環境はUNIX(Solaris)で、Cシェルで実行しています。
開発はWindowsXP SP3で行ってます。

区域外書き出し

【エラーメッセージ】

cobol-rts: HALT: JMP0325I-U [PID:00001E4B TID:00000001] 'OT01FIL'ファイルに対す
る'WRITE'文の実行で,区域外書き出しが発生しました. PGM=TEST110
異常終了 (コアダンプしました)


【原因】
ディスク容量の空きが無い。

【対応】
df -hk コマンドでディスク容量をチェックして、不要ファイルを削除する。

xxxxxxファイルが割り当てられていません.

【エラーメッセージ】

cobol-rts: HALT: JMP0311I-U [PID:0000519B TID:00000001] 'OUT1FILE'ファイルが割り
当てられていません. PGM=TEST050
異常終了


【原因】
プログラム側で使用するファイルがシェル側で宣言されていない、又は間違えている。

【対応】
シェルとPGで入出力ファイルの定義の同期を取ること

シェルが実行できない.

【エラーメッセージ】

: ファイルもディレクトリもありません。


【原因】
事例では、シェルをバイナリモードでUNIXに転送した時に発生しました。
シェルはWindowsで作成しているので、アスキーモードで転送しないとファイルが壊れます。
というか、改行コードが正しく変換されません。
んで、改行コードが壊れたシェルは、正しく実行できないようです。

【対応】
アスキーモードで再度転送する

NUMVAL関数でエラーとなる.

【エラーメッセージ】

cobol-rts: ERROR: JMP0904I-E [PID:000072BC TID:00000001] 関数'NUMVAL'の引数の値に誤りがあります. PGM=TEST001
cobol-rts: ERROR: JMP0904I-E^C


【原因】
数値変換が出来ない値が設定されたため(空白もエラーとなる)。

【対応】
事前に数値チェックをする。
空白が原因なら、実行前に SPACE → "0" のような変換を行うこと。
  
COBOLの処理の順序が正しくない

想定通りの順序で処理が実行されない。

【現象】
ソースはこんな感じ。

***************************************************************
* IN01-READ-RTN
* 入力ファイル読込み
***************************************************************
IN01-READ-RTN SECTION.
*
READ IN01-FIL
AT END
MOVE CS-IN-END TO FLG-IN1-END
NOT AT END
COMPUTE IN01-COUNT = IN01-COUNT + 1
END-READ.
*
IN01-READ-RTN-EXIT.
EXIT.
*
***************************************************************
* FORMAT-SET-REC
* CSVの分解
***************************************************************
FORMAT-SET-RTN.
*


PERFORM文で「IN01-READ-RTN」を実行すると、呼出元に戻らずに「FORMAT-SET-RTN」が実行されました。

【原因】
PERFORM文の飛び先、「 **** SECTION. 」の記述から、「 SECTION 」が抜けていた。
FORMAT-SET-RTN に SECTIONの記述が無いために、IN01-READ-RTN の EXIT. が認識されずに、そのまま処理が流れてしまった。

【対応】
FORMAT-SET-RTN SECTION. に変更。
  
ORA-01413: パック10進数のバッファの値が無効です。

初期化されていない数値型の変数を設定してINSERTを実行した時に発生。
状況から見て、おそらくUPDATEでも発生する。
この件の詳細は、NetCOBOLのサブルーチン修正でORA-01413発生を参照。

【原因】
発生事例では、サブルーチンの修正のため引数のCOPY句に数値項目を追加。
起動側では、項目の初期化をせずにサブルーチンを起動。

【対応】
下記の何れかで対応可能。
1. 起動側で引数全体の初期化処理を実行する。
2. サブルーチン側で数値項目のゼロ処理を追加。

ORA-01488: 入力データ中のニブルまたはバイトが無効です。

SELECT文の実行時に発生。

【原因】
抽出条件として設定していたホスト変数に、値を設定していなかった。

【対応】
SQL文の発行前に、ホスト変数に検索条件を設定する。

***ファイルに対する WRITE 文の実行で,ファイルの最大サイズを超えました.または,ディスクの容量が不足しました.


【原因】
NetCOBOLのファイル制限は1GBなので、出力ファイルの容量がそれ以上になると異常終了します。

【対応】
シェルで、ファイル名を環境変数に設定する時にBSAMを指定します。
指定方法は、ファイル名に続き“,BSAM”です。

setenv OUTFILE1 /var/tmp/outfile.txt,BSAM


ちなみに、本来この指定はファイルの高速処理のための指定なのですが、ファイルサイズの上限を拡張する働きもしてくれるようです。

参考URL:http://software.fujitsu.com/jp/cobol/technical/tech_answer/function0007.html

セグメント例外 (コアダンプしました)

【原因】
使用しているサブルーチンのCOPY句に項目を追加、サブルーチンをリコンパイル。とした後で、メインプログラムをリコンパイルしなかったことが原因。

メインプログラム側では、追加した項目は使用していないので行けるかと思ったんですが、どうやらだめなようです。

【対応】
修正したサブルーチンとCOPY句を使用している全てのプログラムをリコンパイルしました。

前回:NetCOBOLでロードモジュールからSQLを取り出す
投稿記事の一覧 : http://harikofu.blog.fc2.com/blog-entry-22.html

--- blog end ---

スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する