COBOLのエラーハンドリングをやさしく解説!ON SIZE ERRORの基本を理解しよう
生徒
「COBOLのプログラムでエラーが起きたときは、どうやって対処するんですか?」
先生
「COBOLでは、エラーが起こったときに特別な処理を行うための仕組みがあります。例えばON SIZE ERROR
という構文を使って、安全に処理を続けることができるんです。」
生徒
「それを使うと、プログラムが止まったりしないんですか?」
先生
「そのとおりです。では、COBOLのエラーハンドリングの基本を一緒に学んでいきましょう!」
1. エラーハンドリングとは?
エラーハンドリングとは、プログラムを実行しているときに予期しない問題(エラー)が発生した場合、それに適切に対応するための処理のことです。
たとえば、100桁の数字を扱える場所に、101桁の数字を入れようとした場合、プログラムがエラーになります。このようなとき、何も対策をしていないと、プログラムは止まってしまいます。
しかし、COBOLではエラーが起きたときに特定の処理を行う方法が用意されており、そのひとつがON SIZE ERROR
という構文です。
2. ON SIZE ERRORとは?
ON SIZE ERROR
は、主にCOMPUTE
(計算)やADD
(加算)などの算術処理で使われます。計算の結果が、変数に収まらないサイズになってしまったときに実行される処理を指定できます。
例えるなら、「コップに水を入れていたら、あふれそうになったときにアラームを鳴らして水を止める」ようなイメージです。
これにより、予期しない計算結果による不具合を防ぎ、エラーが起きたことをユーザーに知らせたり、安全な代替処理を行ったりできます。
3. 基本的なON SIZE ERRORの書き方
まずはCOMPUTE
文でON SIZE ERROR
を使う基本的な書き方を見てみましょう。
WORKING-STORAGE SECTION.
01 NUM1 PIC 9(3) VALUE 999.
01 NUM2 PIC 9(3) VALUE 2.
01 RESULT PIC 9(3).
PROCEDURE DIVISION.
COMPUTE RESULT = NUM1 * NUM2
ON SIZE ERROR
DISPLAY "エラー発生:結果が大きすぎます。"
NOT ON SIZE ERROR
DISPLAY "計算結果:" RESULT
END-COMPUTE.
STOP RUN.
この例では、999 × 2 = 1998となり、RESULT
には入りきりません(3桁まで)。そのため、ON SIZE ERROR
が実行されて、エラーメッセージが表示されます。
実行結果:
エラー発生:結果が大きすぎます。
4. ON SIZE ERRORを使わないとどうなる?
ON SIZE ERROR
を使わないと、エラーが起きたときにRESULT
の中身が正しくないまま処理が続いてしまう可能性があります。これはとても危険です。
たとえば、銀行の口座残高を計算しているときに、正しくない金額が表示されたら大問題です。ですから、エラーハンドリングはCOBOLプログラムの安全性を高めるうえでとても大切なのです。
5. ADD文でもON SIZE ERRORは使える
ADD
(足し算)でもON SIZE ERROR
を使えます。以下の例をご覧ください。
WORKING-STORAGE SECTION.
01 A PIC 9(3) VALUE 900.
01 B PIC 9(3) VALUE 200.
01 TOTAL PIC 9(3).
PROCEDURE DIVISION.
ADD A TO B GIVING TOTAL
ON SIZE ERROR
DISPLAY "合計が大きすぎます。"
NOT ON SIZE ERROR
DISPLAY "合計は:" TOTAL
END-ADD.
STOP RUN.
900 + 200 = 1100
で、3桁に収まりません。なので、エラーメッセージが表示されます。
合計が大きすぎます。
6. ON SIZE ERRORとNOT ON SIZE ERRORの使い分け
ON SIZE ERROR
は「エラーが起きたとき」の処理、NOT ON SIZE ERROR
は「エラーが起きなかったとき」の処理を記述します。
両方セットで書いておくと、安全かつ柔軟にプログラムの流れをコントロールできます。
7. 実用的な使い方の工夫
実際の業務プログラムでは、エラーが発生した場合、ログに記録したり、データベースに保存したりするケースもあります。最初はDISPLAY
で画面に表示するだけでも十分ですが、ゆくゆくはエラー内容を別の変数に格納して、あとでまとめて出力するような仕組みに発展させることも可能です。
また、エラーを発生させないために、変数のサイズを適切に設計することも大切です。入力チェックや最大値チェックと組み合わせることで、より堅牢なプログラムが作れます。
8. ON SIZE ERRORを使うときの注意点
- ON SIZE ERRORは数値演算専用であり、ファイル処理や文字列操作では使えません。
- 必ず変数の桁数を意識してプログラムを書くようにしましょう。
END-COMPUTE
やEND-ADD
などの終端を忘れずに記述することが重要です。