【COBOL学習|初心者向け】COBOL 2002で実現する!「OCCURS 0」を使った柔軟な動的データ管理術

1. 導入:なぜ「0」から始まるテーブルが必要なのか?

COBOLのプログラミングにおいて、テーブル(配列)を扱う際は「最大何個まで入るか」を定義するのが一般的でした。しかし、実際の業務データでは「データが1件も存在しない状態」を正しく表現することが重要です。従来のCOBOLでは最小値を1にせざるを得ないケースが多く、ダミーデータを入れたり、フラグで制御したりと工夫が必要でした。COBOL 2002規格で導入された「OCCURS 0 TO n TIMES」を使うことで、この課題が劇的に解決されます。

2. 基礎知識:可変長テーブルとDEPENDING ON句

COBOLにおけるテーブルは、同じ形式のデータが連続する領域のことです。
OCCURS句は、その繰り返し回数を定義します。
DEPENDING ON句は、テーブルの現在の使用件数を指定するデータ項目を指定するものです。
例えば、「OCCURS 1 TO 10 TIMES DEPENDING ON WS-COUNT」と書くと、WS-COUNTの値によってテーブルの有効な範囲が変化します。ここで最小値を「0」に設定できるようになったことで、プログラム上で「空のリスト」という状態を自然に扱えるようになりました。

3. 実装・解決策:空の状態を論理的に扱う

最小値を0に設定することで、プログラムのロジックが非常にシンプルになります。
例えば、明細行の件数が0件の場合、ループ処理をスキップさせる制御が自然に行えます。また、データ構造自体が「0件=存在しない」ことを示すため、プログラムの可読性が大幅に向上します。

4. サンプルプログラム

以下は、0件から最大5件まで変動する注文リストを想定したサンプルコードです。

       WORKING-STORAGE SECTION.
       01 WS-ORDER-CONTROL.
          05 WS-ORDER-COUNT PIC 9(1) VALUE 0.  > 現在の注文件数

       01 WS-ORDER-TABLE.
          05 WS-ITEM OCCURS 0 TO 5 TIMES 
                     DEPENDING ON WS-ORDER-COUNT.
             10 WS-ITEM-CODE PIC X(5).
             10 WS-PRICE     PIC 9(5).

       PROCEDURE DIVISION.
       MAIN-LOGIC.
  • 件数が0の場合、テーブルは空として扱われる
MOVE 0 TO WS-ORDER-COUNT. DISPLAY "現在の注文件数: " WS-ORDER-COUNT.
  • 件数を3に変更すると、テーブルは自動的に3要素分となる
MOVE 3 TO WS-ORDER-COUNT. MOVE "A001" TO WS-ITEM-CODE(1). MOVE 1000 TO WS-PRICE(1). DISPLAY "注文1件目: " WS-ITEM-CODE(1). GOBACK.

5. 応用・注意点:現場での運用ポイント

注意点:最小0を指定した場合、件数が0の状態でテーブルの要素(WS-ITEM(1)など)にアクセスしようとすると、実行時エラーになる可能性があります。必ず「IF WS-ORDER-COUNT > 0」といったチェックロジックを前置する癖をつけましょう。

応用:この手法は、WebAPIなどから受け取るJSON形式の配列データ(空配列の可能性があるもの)をCOBOL側で受け取る際に非常に有効です。外部インターフェースとの親和性が高まるため、現代的なCOBOL開発では積極的に活用することをお勧めします。

コメント

タイトルとURLをコピーしました