COBOLのEXECステートメントとプログラム呼び出しを完全解説!初心者向けやさしい入門
生徒
「COBOLで他のプログラムを呼び出す方法ってあるんですか?」
先生
「はい、COBOLではEXECステートメントやCALL文を使って、別のプログラムを実行することができます。」
生徒
「EXECステートメントってなんだか難しそうですね…」
先生
「心配いりません。郵便の宛先を書くように『どこに』『何を』送るかを決めるだけなんですよ。それでは基本から説明していきましょう!」
1. EXECステートメントとは?
COBOLのEXECステートメントは、主に外部プログラムや特定のシステム機能を呼び出すために使われる命令です。特にIBMのメインフレーム環境では、EXEC CICSやEXEC SQLなどの形式で利用されます。
ここでいう「外部プログラム」とは、自分が今書いているCOBOLプログラムとは別の場所にあるプログラムや、データベース操作を行う機能のことです。EXECは、そのような外部の処理を呼び出すための『伝票』のような役割を持っています。
例えば、EXEC SQLはデータベースに命令を送るために使われます。EXEC CICSはCICSというオンライン処理システムに命令を渡します。つまり、EXECは「この命令は特別な外部システムに送りますよ」という合図です。
2. EXECステートメントの基本構造
EXECステートメントは、必ずEXECで始まり、END-EXECで終わります。このEND-EXECは、どこまでが外部システムへの命令なのかを示す終わりのマークです。
EXEC SQL
SELECT * FROM USER_TABLE
END-EXEC
この例では、SQLというデータベース言語をCOBOLの中から実行しています。
3. COBOLでのプログラム呼び出し(CALL文)
EXECステートメントと並んで重要なのがCALL文です。CALL文は、別のCOBOLプログラムを呼び出して実行するための命令です。これは、家の中から電話をかけて友達に「これお願い!」と頼むようなイメージです。
CALL 'SUBPGM1'
USING WS-NAME WS-AGE
END-CALL
ここでは、SUBPGM1というプログラムを呼び出し、WS-NAMEとWS-AGEという変数を渡しています。
4. EXECステートメントとCALL文の違い
EXECステートメントは、特定の外部システム(データベースやオンライン処理)とやり取りするために使われます。一方で、CALL文はCOBOLの別プログラムを実行するために使われます。
- EXEC → 外部システムや専用機能を呼び出す(例:SQL、CICS)
- CALL → 他のCOBOLプログラムを呼び出す
5. プログラム呼び出しの流れ
プログラム呼び出しの流れを理解するために、宅配便のやり取りに例えてみましょう。
- 送り主(呼び出し元プログラム)が「荷物」(データ)を準備する
- 配送員(CALLやEXECの命令)が荷物を届ける
- 受け取り側(呼び出されるプログラム)が荷物を受け取り、作業を行う
- 結果を送り返す(必要に応じて)
このように、EXECやCALLは単なる命令ではなく、プログラム同士の橋渡しをする重要な役割を担っています。
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. 注意点とベストプラクティス
初心者がEXECステートメントやCALL文を使うときは、以下のポイントを意識しましょう。
- EXECは必ず
END-EXECで閉じること - CALLで渡すデータの型と順番は、呼び出されるプログラムと一致させること
- 外部システムとやり取りする場合は、事前にそのシステムの仕様を確認すること
- デバッグ時には、どのタイミングでプログラム間のやり取りが行われているかをログで確認すると理解が深まります