
NetCOBOLを使っていて発生したエラーの内容と、対応事例集です。
実行環境はUNIX(Solaris)で、Cシェルで実行しています。
開発はWindowsXP SP3で行ってます。
【エラーメッセージ】
【原因】
ディスク容量の空きが無い。
【対応】
df -hk コマンドでディスク容量をチェックして、不要ファイルを削除する。
【エラーメッセージ】
【原因】
プログラム側で使用するファイルがシェル側で宣言されていない、又は間違えている。
【対応】
シェルとPGで入出力ファイルの定義の同期を取ること
【エラーメッセージ】
【原因】
事例では、シェルをバイナリモードでUNIXに転送した時に発生しました。
シェルはWindowsで作成しているので、アスキーモードで転送しないとファイルが壊れます。
というか、改行コードが正しく変換されません。
んで、改行コードが壊れたシェルは、正しく実行できないようです。
【対応】
アスキーモードで再度転送する
【エラーメッセージ】
【原因】
数値変換が出来ない値が設定されたため(空白もエラーとなる)。
【対応】
事前に数値チェックをする。
空白が原因なら、実行前に SPACE → "0" のような変換を行うこと。
想定通りの順序で処理が実行されない。
【現象】
ソースはこんな感じ。
PERFORM文で「IN01-READ-RTN」を実行すると、呼出元に戻らずに「FORMAT-SET-RTN」が実行されました。
【原因】
PERFORM文の飛び先、「 **** SECTION. 」の記述から、「 SECTION 」が抜けていた。
FORMAT-SET-RTN に SECTIONの記述が無いために、IN01-READ-RTN の EXIT. が認識されずに、そのまま処理が流れてしまった。
【対応】
FORMAT-SET-RTN SECTION. に変更。
初期化されていない数値型の変数を設定してINSERTを実行した時に発生。
状況から見て、おそらくUPDATEでも発生する。
この件の詳細は、NetCOBOLのサブルーチン修正でORA-01413発生を参照。
【原因】
発生事例では、サブルーチンの修正のため引数のCOPY句に数値項目を追加。
起動側では、項目の初期化をせずにサブルーチンを起動。
【対応】
下記の何れかで対応可能。
1. 起動側で引数全体の初期化処理を実行する。
2. サブルーチン側で数値項目のゼロ処理を追加。
SELECT文の実行時に発生。
【原因】
抽出条件として設定していたホスト変数に、値を設定していなかった。
【対応】
SQL文の発行前に、ホスト変数に検索条件を設定する。
【原因】
NetCOBOLのファイル制限は1GBなので、出力ファイルの容量がそれ以上になると異常終了します。
【対応】
シェルで、ファイル名を環境変数に設定する時にBSAMを指定します。
指定方法は、ファイル名に続き“,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 ---
スポンサードリンク
実行環境は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 ---
スポンサードリンク


