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で渡すデータの型と順番は、呼び出されるプログラムと一致させること
- 外部システムとやり取りする場合は、事前にそのシステムの仕様を確認すること
- デバッグ時には、どのタイミングでプログラム間のやり取りが行われているかをログで確認すると理解が深まります
まとめ
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なんかは実務でよく見ると聞いたことがあるので、早めに慣れておきたいと思います。」
先生
「とても良い姿勢ですね。プログラムを書きながら身につけると理解が定着しますので、ぜひ繰り返し手を動かしてください。」