カテゴリ: COBOL 更新日: 2025/12/24

COBOLのOCCURS句とは?初心者でもわかる配列(テーブル)の定義方法

OCCURS句を使った配列(テーブル)の定義
OCCURS句を使った配列(テーブル)の定義

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

生徒

「先生、COBOLで同じ種類のデータをたくさん扱うにはどうすればいいですか?」

先生

「良いところに目をつけましたね。COBOLでは OCCURS句 を使って『配列』のようなデータ構造を定義できます。」

生徒

「配列ってなんですか?初めて聞きました。」

先生

「配列とは、同じ形をした箱を横にズラッと並べたイメージです。たとえば、10人分の名前や点数を扱いたいときにとても便利なんですよ。それでは、COBOLのOCCURS句の使い方をわかりやすく解説していきましょう!」

1. OCCURS句とは?

1. OCCURS句とは?
1. OCCURS句とは?

OCCURS句(オカーズ句)は、COBOLで「同じ形式のデータを複数まとめて管理する」ための書き方です。配列(テーブル)とも呼ばれます。

たとえば、10人分のテストの点数をそれぞれ別々に変数を用意して書くと、大変で面倒ですよね。

でも、OCCURS句を使うと、同じ型のデータをまとめて定義できるので、次のようにコンパクトに表現できます。

2. 配列(テーブル)のイメージを図で理解しよう

2. 配列(テーブル)のイメージを図で理解しよう
2. 配列(テーブル)のイメージを図で理解しよう

まずは図でイメージしましょう。

例えば、生徒の点数を5人分保存する場合、以下のような「データの箱」をイメージします。

  • 点数(1)
  • 点数(2)
  • 点数(3)
  • 点数(4)
  • 点数(5)

このように、同じ形のデータを繰り返して管理したいときに、OCCURS句が役立ちます。

3. OCCURS句を使ったCOBOLの定義方法

3. OCCURS句を使ったCOBOLの定義方法
3. OCCURS句を使ったCOBOLの定義方法

実際のCOBOLコードを見てみましょう。


01  STUDENT-SCORES.
    05  SCORE   PIC 9(3) OCCURS 5 TIMES.

このように書くと、「SCORE」という名前のデータが5個まとめて定義されます。

PIC 9(3)は、「3桁の数字」を意味しています。

OCCURS 5 TIMESは、「5回繰り返す」、つまり5個のデータを持つという意味です。

4. データに値を入れて表示するサンプル

4. データに値を入れて表示するサンプル
4. データに値を入れて表示するサンプル

配列の使い方をより理解するために、簡単なサンプルプログラムを見てみましょう。


IDENTIFICATION DIVISION.
PROGRAM-ID. OCCURS-DEMO.

DATA DIVISION.
WORKING-STORAGE SECTION.
01  STUDENT-SCORES.
    05  SCORE   PIC 9(3) OCCURS 5 TIMES.

01  I        PIC 9.

PROCEDURE DIVISION.
    MOVE 80 TO SCORE(1)
    MOVE 90 TO SCORE(2)
    MOVE 70 TO SCORE(3)
    MOVE 85 TO SCORE(4)
    MOVE 95 TO SCORE(5)

    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
        DISPLAY "生徒" I "の点数:" SCORE(I)
    END-PERFORM

    STOP RUN.

このプログラムでは、5人分の点数を「SCORE」という配列に格納し、それぞれを順番に表示しています。

5. 実行結果

5. 実行結果
5. 実行結果

上記のプログラムを実行すると、以下のような結果になります。


生徒1の点数:80
生徒2の点数:90
生徒3の点数:70
生徒4の点数:85
生徒5の点数:95

6. OCCURS句を使うと何が便利なの?

6. OCCURS句を使うと何が便利なの?
6. OCCURS句を使うと何が便利なの?

OCCURS句を使うことで、以下のようなメリットがあります:

  • 同じ種類のデータをまとめて扱える
  • 処理をPERFORMなどで繰り返せるのでコードがすっきり
  • たくさんの変数を個別に定義する必要がない

これにより、ミスも減り、プログラムの見通しがよくなります。

7. OCCURS句の注意点

7. OCCURS句の注意点
7. OCCURS句の注意点

OCCURS句を使うときは、いくつか注意点もあります。

  • OCCURSの中で別のOCCURSを使う「多次元配列」は複雑なので、まずは1次元配列から学びましょう。
  • 配列の番号は、1から始まります(0ではありません)。
  • 定義したサイズ(たとえば5)を超えてアクセスするとエラーになります。

8. 配列とループ処理(PERFORM)の組み合わせ

8. 配列とループ処理(PERFORM)の組み合わせ
8. 配列とループ処理(PERFORM)の組み合わせ

配列と相性がいいのが、PERFORM VARYINGです。

これは「繰り返し処理」をするための命令で、配列の各要素を1つずつ処理するのにぴったりです。

たとえば、5人分の点数を全部表示したいとき、さきほどのようにPERFORMと一緒に使えば、短くわかりやすいコードになります。

まとめ

まとめ
まとめ

今回の記事では、COBOLにおけるOCCURS句の役割と使い方について学びました。OCCURS句は、同じ構造のデータを複数まとめて管理するための便利な仕組みで、配列(テーブル)のように使えるのが特徴です。

特に、複数人の点数や商品リストなど、同じ形式の情報をたくさん扱う場面では、ひとつずつ変数を定義するよりもOCCURS句を使ったほうがコードの可読性や保守性が向上します。記事内で紹介したサンプルプログラムのように、配列の各要素に値を設定し、PERFORM VARYINGでループ処理を行うことで、効率的な出力が実現できました。

さらに、OCCURS句を使う際にはいくつかのルールや注意点もありました。たとえば、配列の添字は1から始まり、定義数を超えてアクセスしてはいけないこと、多次元配列は初学者には少し難しいことなどが挙げられます。こういった点を意識しながらプログラムを組むことで、エラーを防ぎ、安全で信頼性の高いCOBOLコードを書くことができます。

実際にコードを書いてみると、COBOLの構文は英語に近く、意味が想像しやすいので、初心者にも比較的やさしい設計になっていると感じられたのではないでしょうか。特に、OCCURS句とPERFORM文を組み合わせることで、COBOLでも繰り返し処理データの一括処理が可能になる点は、実務でも非常に役立つ知識です。

最後に、応用として「生徒名と点数」をセットで配列に持たせる例を紹介します。データ構造の入れ子(ネスト)とOCCURS句の組み合わせを通じて、より実践的な配列の扱い方を学びましょう。

サンプル:生徒名と点数をセットで持つ配列の定義


       IDENTIFICATION DIVISION.
       PROGRAM-ID. STUDENT-RECORDS.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01  STUDENT-LIST.
           05  STUDENT-INFO OCCURS 3 TIMES.
               10  STUDENT-NAME   PIC A(10).
               10  STUDENT-SCORE  PIC 9(3).

       01  I        PIC 9.

       PROCEDURE DIVISION.
           MOVE "TANAKA   " TO STUDENT-NAME(1)
           MOVE 88         TO STUDENT-SCORE(1)

           MOVE "SUZUKI   " TO STUDENT-NAME(2)
           MOVE 92         TO STUDENT-SCORE(2)

           MOVE "YAMADA   " TO STUDENT-NAME(3)
           MOVE 75         TO STUDENT-SCORE(3)

           PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
               DISPLAY "名前:" STUDENT-NAME(I) " 点数:" STUDENT-SCORE(I)
           END-PERFORM

           STOP RUN.

このように、OCCURS句の中に複数の要素(名前と点数)を含めることで、より複雑な情報を整理して持たせることができます。実務でのデータ処理や帳票出力などにも応用できるので、ぜひ練習してみてください。

先生と生徒の振り返り会話

生徒

「先生、OCCURS句って配列みたいなものなんですね。今までひとつずつ変数を作ってたのが、まとめて書けてすごく楽になりました!」

先生

「そうですね。配列のように繰り返しデータを扱うにはOCCURS句がぴったりです。処理もPERFORMで簡単にできますし、ミスも減りますよ。」

生徒

「それに、名前と点数を一緒に持てる例も面白かったです!あれってネストになってるんですね?」

先生

「よく気付きましたね。OCCURSの中に複数の項目を入れることで、1人分の情報をひとまとまりで管理できるようになります。」

生徒

「これができたら、実際の業務データとかも扱えそうな気がしてきました!」

先生

「その通りです。COBOLは今でも現場で使われていますから、こうした基本をしっかり押さえておくと強みになりますよ。」

カテゴリの一覧へ
新着記事
New1
C#
C#のLINQでAny・Allなど条件確認メソッドの使い方を完全ガイド!初心者でもわかるデータ検証
New2
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New3
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New4
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
人気記事
No.1
Java&Spring記事人気No1
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.2
Java&Spring記事人気No2
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決
No.8
Java&Spring記事人気No8
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法