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

COBOLのEXECステートメントとプログラム呼び出しを完全解説!初心者向けやさしい入門

EXECステートメントとプログラム呼び出しの仕組み
EXECステートメントとプログラム呼び出しの仕組み

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

生徒

「COBOLで他のプログラムを呼び出す方法ってあるんですか?」

先生

「はい、COBOLではEXECステートメントやCALL文を使って、別のプログラムを実行することができます。」

生徒

「EXECステートメントってなんだか難しそうですね…」

先生

「心配いりません。郵便の宛先を書くように『どこに』『何を』送るかを決めるだけなんですよ。それでは基本から説明していきましょう!」

1. EXECステートメントとは?

1. EXECステートメントとは?
1. EXECステートメントとは?

COBOLのEXECステートメントは、主に外部プログラムや特定のシステム機能を呼び出すために使われる命令です。特にIBMのメインフレーム環境では、EXEC CICSEXEC SQLなどの形式で利用されます。

ここでいう「外部プログラム」とは、自分が今書いているCOBOLプログラムとは別の場所にあるプログラムや、データベース操作を行う機能のことです。EXECは、そのような外部の処理を呼び出すための『伝票』のような役割を持っています。

例えば、EXEC SQLはデータベースに命令を送るために使われます。EXEC CICSはCICSというオンライン処理システムに命令を渡します。つまり、EXECは「この命令は特別な外部システムに送りますよ」という合図です。

2. EXECステートメントの基本構造

2. EXECステートメントの基本構造
2. EXECステートメントの基本構造

EXECステートメントは、必ずEXECで始まり、END-EXECで終わります。このEND-EXECは、どこまでが外部システムへの命令なのかを示す終わりのマークです。


EXEC SQL
    SELECT * FROM USER_TABLE
END-EXEC

この例では、SQLというデータベース言語をCOBOLの中から実行しています。

3. COBOLでのプログラム呼び出し(CALL文)

3. COBOLでのプログラム呼び出し(CALL文)
3. COBOLでのプログラム呼び出し(CALL文)

EXECステートメントと並んで重要なのがCALL文です。CALL文は、別のCOBOLプログラムを呼び出して実行するための命令です。これは、家の中から電話をかけて友達に「これお願い!」と頼むようなイメージです。


CALL 'SUBPGM1'
    USING WS-NAME WS-AGE
END-CALL

ここでは、SUBPGM1というプログラムを呼び出し、WS-NAMEWS-AGEという変数を渡しています。

4. EXECステートメントとCALL文の違い

4. EXECステートメントとCALL文の違い
4. EXECステートメントとCALL文の違い

EXECステートメントは、特定の外部システム(データベースやオンライン処理)とやり取りするために使われます。一方で、CALL文はCOBOLの別プログラムを実行するために使われます。

  • EXEC → 外部システムや専用機能を呼び出す(例:SQL、CICS)
  • CALL → 他のCOBOLプログラムを呼び出す

5. プログラム呼び出しの流れ

5. プログラム呼び出しの流れ
5. プログラム呼び出しの流れ

プログラム呼び出しの流れを理解するために、宅配便のやり取りに例えてみましょう。

  1. 送り主(呼び出し元プログラム)が「荷物」(データ)を準備する
  2. 配送員(CALLやEXECの命令)が荷物を届ける
  3. 受け取り側(呼び出されるプログラム)が荷物を受け取り、作業を行う
  4. 結果を送り返す(必要に応じて)

このように、EXECやCALLは単なる命令ではなく、プログラム同士の橋渡しをする重要な役割を担っています。

6. 実行例

6. 実行例
6. 実行例

ここでは、CALL文を使って別プログラムを呼び出す簡単な例を示します。


IDENTIFICATION DIVISION.
PROGRAM-ID. MAINPGM.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NAME PIC X(20) VALUE "山田太郎".
01 WS-AGE  PIC 9(3) VALUE 30.
PROCEDURE DIVISION.
    CALL 'HELLOPGM' USING WS-NAME WS-AGE
    DISPLAY "メインプログラムに戻りました。"
    STOP RUN.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOPGM.
DATA DIVISION.
LINKAGE SECTION.
01 LK-NAME PIC X(20).
01 LK-AGE  PIC 9(3).
PROCEDURE DIVISION USING LK-NAME LK-AGE.
    DISPLAY "こんにちは、" LK-NAME "さん。年齢は" LK-AGE "歳ですね。"
    EXIT PROGRAM.

こんにちは、山田太郎さん。年齢は 30 歳ですね。
メインプログラムに戻りました。

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

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

初心者がEXECステートメントやCALL文を使うときは、以下のポイントを意識しましょう。

  • EXECは必ずEND-EXECで閉じること
  • CALLで渡すデータの型と順番は、呼び出されるプログラムと一致させること
  • 外部システムとやり取りする場合は、事前にそのシステムの仕様を確認すること
  • デバッグ時には、どのタイミングでプログラム間のやり取りが行われているかをログで確認すると理解が深まります

まとめ

まとめ
まとめ

COBOLのEXECステートメントとCALL文は、業務システムの中で複数の処理を安全に連携させるために欠かせない重要な機能です。EXECステートメントは外部システムとつながる窓口のような働きを持ち、SQLやCICSなど特定の対象に対して明確な指示を送るために利用されます。一方でCALL文は、COBOL同士のプログラムをつなげ、必要なデータを渡しながら処理を継続させるための柔軟な仕組みです。どちらも大規模なシステム開発では頻繁に使用されるため、初心者の段階でしっかり理解しておくことで、実際の業務プログラムを読むときの理解度が大きく変わります。 とくにEXECステートメントはEND-EXECで確実に閉じる必要があり、外部システム固有の文法に従って記述する点が大きな特徴です。SQLであればデータ取得や更新ができ、CICSであればオンライン処理の実行が可能になるため、COBOLの枠を超えてシステム全体に指示を出す力を持ちます。CALL文はサブルーチン呼び出しと似た役割で、名前を指定してプログラムを呼び出し、必要なデータをUSING句で渡すことで、複数の業務処理を効率よく組み立てられます。 以下に、EXECとCALLの考え方を整理するためのサンプルプログラムをまとめます。実際の業務でも近い構造で使われることが多いため、理解を深める良い練習材料になります。

EXECとCALLのサンプルまとめ


IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLEMAIN.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-ID    PIC 9(4) VALUE 1001.
01 WS-NAME  PIC X(20) VALUE "佐藤花子".
PROCEDURE DIVISION.

    EXEC SQL
        SELECT USER_NAME INTO :WS-NAME
        FROM USER_TABLE
        WHERE USER_ID = :WS-ID
    END-EXEC

    CALL 'SHOWPGM' USING WS-NAME
    DISPLAY "メイン処理終了"
    STOP RUN.

IDENTIFICATION DIVISION.
PROGRAM-ID. SHOWPGM.
DATA DIVISION.
LINKAGE SECTION.
01 LK-NAME PIC X(20).
PROCEDURE DIVISION USING LK-NAME.
    DISPLAY "利用者:" LK-NAME " さん".
    EXIT PROGRAM.

このように、EXECステートメントは外部システムとの連携を行い、CALL文はプログラム間の橋渡しを行います。それぞれの役割を理解して使い分けることで、複雑な処理でも整理された構造で記述できるようになります。特に大規模なメインフレーム環境では、外部処理と内部処理が混在するため、両者の違いを明確に理解することが正確なプログラム実装につながります。 また、データの受け渡しでは型の一致が非常に重要であり、誤った順番で渡してしまうと期待したデータが正しく処理されないことがあります。LINKAGE SECTIONやUSING句の仕組みを理解しておくと、プログラムの流れがより自然に理解できるようになります。EXECやCALLの仕組みを習得することで、COBOLプログラム全体の構造をより深くつかむことができ、複数の処理を組み合わせた柔軟なシステム設計ができるようになります。 最後に、EXECステートメントとCALL文は習得すると非常に強力な道具となり、システム内のさまざまな処理を滑らかにつなぐ役割を果たします。日々の学習や実務の中で、実際にコードを書いたり、動作を確認したりしながら身につけていくことが大切です。しっかり理解すれば、複雑な業務処理も確実に組み立てられるようになります。

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

生徒

「EXECとCALLの役割がようやくつかめました。外部システムにはEXEC、COBOL同士の連携にはCALLを使い分けるんですね!」

先生

「その理解はとても良いですよ。特にメインフレーム系では両方を組み合わせて処理を進める場面が多いので、どちらにも慣れておくと強みになります。」

生徒

「CALLでUSING句を使うとき、順番や型を揃える必要があるというのは特に重要ですね。エラーの原因にもなりそうです。」

先生

「まさにその通りです。データの受け渡しは慎重に記述する必要があります。LINKAGE SECTIONの仕組みも覚えておくと理解がもっと深まりますよ。」

生徒

「EXEC SQLなんかは実務でよく見ると聞いたことがあるので、早めに慣れておきたいと思います。」

先生

「とても良い姿勢ですね。プログラムを書きながら身につけると理解が定着しますので、ぜひ繰り返し手を動かしてください。」

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