カテゴリ: COBOL 更新日: 2025/11/06

COBOLのON SIZE ERROR句を徹底解説!初心者でもわかるエラーハンドリングの基本

ON SIZE ERROR句を活用したエラーハンドリング
ON SIZE ERROR句を活用したエラーハンドリング

先生と生徒の会話形式で理解しよう

生徒

「先生、COBOLで計算してたら、たまにおかしな結果が出るんです。これってエラーですか?」

先生

「いい質問ですね。それはもしかすると『サイズエラー』というものかもしれません。COBOLでは、数値が桁あふれしたときにON SIZE ERROR句で対処できるんですよ。」

生徒

「桁あふれ?どういうことですか?」

先生

「では、今日はその『ON SIZE ERROR句』を使ったエラーハンドリングの方法を、やさしく説明していきましょう!」

1. ON SIZE ERROR句とは?

1. ON SIZE ERROR句とは?
1. ON SIZE ERROR句とは?

ON SIZE ERROR句(オン・サイズ・エラー句)は、COBOLで計算を行う際に、結果が定義された桁数を超えてしまったとき(いわゆる桁あふれ)に実行される特別な処理を指定するための機能です。

たとえば、PIC 9(3)という定義は「3桁の整数」という意味ですが、そこに「999 + 5」を代入すると「1004」となり、4桁になるため格納できません。こういったときに、COBOLは自動でエラーを出す代わりに、ON SIZE ERRORで指定した処理を実行します。

プログラムで安全に計算を行うためには、このON SIZE ERRORを正しく使うことがとても大切です。

2. 基本の書き方

2. 基本の書き方
2. 基本の書き方

ON SIZE ERROR句は、ADD(足し算)、SUBTRACT(引き算)、MULTIPLY(掛け算)、DIVIDE(割り算)、COMPUTE(複合計算)などの算術文(さんじゅつぶん)と一緒に使います。


ADD A TO B
    ON SIZE ERROR
        DISPLAY "サイズエラーが発生しました。"
    NOT ON SIZE ERROR
        DISPLAY "計算が正常に行われました。"
END-ADD.

ポイント:

  • ON SIZE ERRORの中には「エラーが起きたときの処理」を書きます。
  • NOT ON SIZE ERRORの中には「正常に処理できたときの処理」を書きます。
  • 最後に必ずEND-ADDなど、対応する命令を閉じます。

3. 実際のサンプルコード

3. 実際のサンプルコード
3. 実際のサンプルコード

次のプログラムは、あえて桁あふれが起きるようにして、ON SIZE ERRORの動きを確認する例です。


IDENTIFICATION DIVISION.
PROGRAM-ID. SIZE-ERROR-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A         PIC 9(3) VALUE 999.
01 B         PIC 9(3) VALUE 5.
01 RESULT    PIC 9(3) VALUE 0.

PROCEDURE DIVISION.
    ADD A TO B GIVING RESULT
        ON SIZE ERROR
            DISPLAY "エラー発生:計算結果が桁あふれしました。"
        NOT ON SIZE ERROR
            DISPLAY "計算成功:結果 = " RESULT
    END-ADD.
    STOP RUN.

このプログラムを実行すると、結果は次のようになります。


    エラー発生:計算結果が桁あふれしました。

999 + 5 = 1004 ですが、RESULTは3桁しか入らないためエラーになります。COBOLはこのときON SIZE ERRORの部分を実行します。

4. NOT ON SIZE ERRORで安全な処理を行う

4. NOT ON SIZE ERRORで安全な処理を行う
4. NOT ON SIZE ERRORで安全な処理を行う

NOT ON SIZE ERRORを使うと、「桁あふれしなかった場合」の処理も一緒に書けます。これにより、エラーが発生しても発生しなくても、プログラムの動作をきちんとコントロールできます。


COMPUTE RESULT = A + B
    ON SIZE ERROR
        DISPLAY "結果がオーバーフローしました。"
    NOT ON SIZE ERROR
        DISPLAY "正常に計算できました。結果は:" RESULT
END-COMPUTE.

このようにすることで、エラー時と正常時の処理を明確に分けることができます。業務システムでは、このような安全な設計がとても重要です。

5. ON SIZE ERRORが起きる原因

5. ON SIZE ERRORが起きる原因
5. ON SIZE ERRORが起きる原因

初心者の方が混乱しやすいのは、「なぜサイズエラーが起きるのか?」という点です。原因は主に次の3つです。

  1. 変数の桁数が足りない たとえば、PIC 9(3)に4桁の数値を入れようとした場合、エラーになります。
  2. 符号(プラス・マイナス)の扱い PIC S9(3)(符号付き)に大きな正数を入れると、許容範囲を超えてしまうことがあります。
  3. 小数点位置の不一致 小数点を持つ変数(例:9V99)と整数を混ぜて計算すると、桁ズレが起きてサイズエラーにつながる場合があります。

6. 実務での活用例:安全な金額計算

6. 実務での活用例:安全な金額計算
6. 実務での活用例:安全な金額計算

銀行や販売管理などの業務システムでは、金額計算でサイズエラーを防ぐことが特に重要です。たとえば、1億円を超える計算を3桁の変数で扱うと当然エラーになります。次のように、ON SIZE ERRORを使って安全に処理できます。


IDENTIFICATION DIVISION.
PROGRAM-ID. SAFE-CALC.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TOTAL-AMOUNT  PIC 9(6) VALUE 999999.
01 ADDITION      PIC 9(4) VALUE 5000.
01 RESULT-AMOUNT PIC 9(6) VALUE 0.

PROCEDURE DIVISION.
    ADD TOTAL-AMOUNT TO ADDITION GIVING RESULT-AMOUNT
        ON SIZE ERROR
            DISPLAY "金額が上限を超えました。再計算してください。"
        NOT ON SIZE ERROR
            DISPLAY "正常計算:合計金額は " RESULT-AMOUNT " 円です。"
    END-ADD.
    STOP RUN.

このようにしておくと、エラーが起きてもプログラムが途中で止まらず、ユーザーにメッセージを表示することができます。

7. 注意点とベストプラクティス

7. 注意点とベストプラクティス
7. 注意点とベストプラクティス

ON SIZE ERRORを使うときは、次の点に気をつけましょう。

  • 結果を代入する変数の桁数を常に確認する。
  • 重要な計算にはON SIZE ERRORを必ずつけて、安全性を高める。
  • 必要に応じてNOT ON SIZE ERRORも使い、処理の流れを明確にする。

これらを意識することで、COBOLプログラムの信頼性(しんらいせい)を大きく向上させることができます。

カテゴリの一覧へ
新着記事
C#で複数ファイルをまとめて操作する方法(foreach・LINQ)をやさしく解説!
C#のインターフェースとは?クラス設計を柔軟にする基本技術
C#のコンストラクタの役割と使い方!オブジェクト初期化の基本
COBOLでデータベース接続を理解しよう!初心者でもわかる基本の考え方
人気記事
No.1
Java&Spring記事人気No1
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.3
Java&Spring記事人気No3
C#の数値型をマスターしよう!int・double・decimalの違いと使い方
No.4
Java&Spring記事人気No4
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法