COBOLのEXEC SQLの使い方を完全ガイド!初心者でもわかるデータベース接続の基本構文
生徒
「先生、COBOLからデータベースにアクセスすることってできるんですか?」
先生
「もちろんできますよ。COBOLでは、EXEC SQLという特別な命令を使って、SQL文を直接書くことができます。」
生徒
「SQLって、あのデータベースの言語ですよね?COBOLの中で使えるんですか?」
先生
「そうなんです。COBOLの中にSQL文を埋め込むことで、データの取得や更新を行うことができます。今日はその基本構文を一緒に学びましょう。」
1. EXEC SQLとは?
COBOLのEXEC SQLとは、プログラムの中にSQL文(データベース操作用の命令)を直接書くための特別な構文です。SQL(エスキューエル)は「Structured Query Language(構造化問い合わせ言語)」の略で、データベースの中の情報を読み書きするために使われます。
つまり、COBOLとSQLを組み合わせることで、銀行や企業の基幹システムのように「ファイルだけでなく、データベース(DB)」にアクセスできるようになります。
2. EXEC SQLの基本構文
基本的な書き方はとてもシンプルです。SQL文をEXEC SQLとEND-EXECで囲むだけです。これでCOBOLのプログラム内でSQLを実行できるようになります。
EXEC SQL
SQL文
END-EXEC
このように、SQLをそのままCOBOLの中に書けるのが特徴です。EXEC SQLで始まり、END-EXECで終わる、これが基本の形になります。
3. データベースに接続する構文
まず最初に、データベースに接続する必要があります。これにはCONNECT文を使います。データベースのユーザー名とパスワードを指定して接続します。
EXEC SQL
CONNECT TO sampledb USER 'user1' USING 'password1'
END-EXEC
この例では、「sampledb」というデータベースに「user1」というユーザー名と「password1」というパスワードで接続しています。実際の環境では、データベース名や認証情報はシステムによって異なります。
4. データを取得する(SELECT文)
次に、データベースから情報を取り出す方法を見てみましょう。SQLの基本であるSELECT文を使います。COBOLでは、結果を格納するための変数(ホスト変数)を事前に定義しておきます。
WORKING-STORAGE SECTION.
01 EMP-NAME PIC X(30).
PROCEDURE DIVISION.
EXEC SQL
SELECT EMPLOYEE_NAME
INTO :EMP-NAME
FROM EMPLOYEE
WHERE EMPLOYEE_ID = 1001
END-EXEC.
DISPLAY "社員名は:" EMP-NAME.
ここで出てくる「ホスト変数」とは、COBOLの中でSQLの結果を受け取るための変数のことです。COBOL変数の前には「コロン(:)」をつけるのがルールです。これが「SQLとCOBOLの橋渡し」のような役割をします。
5. データを更新する(INSERT・UPDATE・DELETE)
COBOLのEXEC SQLでは、データの追加や更新、削除もできます。以下は新しいデータを追加するINSERT文の例です。
EXEC SQL
INSERT INTO EMPLOYEE (EMPLOYEE_ID, EMPLOYEE_NAME)
VALUES (2001, '田中太郎')
END-EXEC.
また、データを更新する場合はUPDATE文、削除する場合はDELETE文を使います。
EXEC SQL
UPDATE EMPLOYEE
SET EMPLOYEE_NAME = '鈴木花子'
WHERE EMPLOYEE_ID = 2001
END-EXEC.
EXEC SQL
DELETE FROM EMPLOYEE
WHERE EMPLOYEE_ID = 2001
END-EXEC.
このように、SQLの基本操作はすべてCOBOL内で実行できます。これにより、業務システムのデータを直接操作できるようになります。
6. データベース操作の流れを理解しよう
COBOLでデータベースを扱う際の流れは、大まかに次のようになります。
- データベースに接続する(
CONNECT) - SQL文を実行する(
SELECTやINSERTなど) - 結果を変数に格納して処理する
- 必要があればトランザクションを確定する(
COMMIT) - 最後に接続を切る(
DISCONNECT)
この流れをしっかり覚えておけば、どんなデータベース操作でも迷わず書けるようになります。
7. 実際の動作イメージ
では、実際にプログラムが動作するときの出力イメージを見てみましょう。
社員名は:山田太郎
このように、SQLで取得したデータがCOBOL変数に入り、それを画面に表示できます。まるで「COBOLがデータベースと会話している」ようですね。
8. エラー処理の基本
データベース操作では、接続エラーやSQLの書き間違いなどのトラブルも発生します。COBOLでは、SQLCODEという変数を使ってSQLの実行結果を確認します。0なら成功、負の値ならエラー、正の値は警告を意味します。
IF SQLCODE NOT = 0
DISPLAY "エラーが発生しました。SQLCODE=" SQLCODE
END-IF
これにより、万が一のトラブルにも対応できる堅牢なプログラムを作ることができます。
まとめ
COBOLのEXEC SQLは、企業システムや金融システムのような大規模環境で必須となるデータベース連携を実現する非常に重要な仕組みです。とくに、CONNECTによる接続処理、SELECTによるデータ取得、INSERT・UPDATE・DELETEによる更新処理など、日常的な業務の裏側で動く多くの処理がこの構文によって支えられています。これらの構文は、EXEC SQL と END-EXEC によってCOBOL内部に自然に埋め込まれ、ホスト変数を介してデータを受け渡すことで、実務的な情報処理を安全かつ効率良く行えるようになります。また、SQLCODEによるエラー判定は、運用現場でのトラブル防止に欠かせない要素であり、SQLの成功・警告・失敗を細かく判断しながら堅牢な処理を実現できます。 以下では、学んだ内容を整理しながら、実際の処理をイメージしやすいようサンプルプログラムを交えて振り返ります。COBOLとデータベースの関係性を理解することで、これまでファイル処理が中心だった場面でも柔軟に設計できるようになり、基幹系システムの設計力がより強固なものとなります。
サンプルプログラムで流れを再確認
EXEC SQL を利用した基本的な一連の流れを再度整理したサンプルを以下に示します。CONNECT による接続、SELECT による取得、COMMIT、DISCONNECT までの処理を通して、実際の業務システムがどのようにデータベースと連携しているかがよくわかります。
WORKING-STORAGE SECTION.
01 OUT-NAME PIC X(30).
01 OUT-ID PIC 9(4).
PROCEDURE DIVISION.
EXEC SQL
CONNECT TO sampledb USER 'user1' USING 'password1'
END-EXEC
EXEC SQL
SELECT EMPLOYEE_NAME
INTO :OUT-NAME
FROM EMPLOYEE
WHERE EMPLOYEE_ID = 1001
END-EXEC
IF SQLCODE = 0
DISPLAY "取得した社員名:" OUT-NAME
ELSE
DISPLAY "取得に失敗しました。SQLCODE=" SQLCODE
END-IF
EXEC SQL
COMMIT
END-EXEC
EXEC SQL
DISCONNECT CURRENT
END-EXEC
こうした構成を理解しておくと、COBOLによるデータ連携の基礎がしっかり身につき、SELECT・INSERT・UPDATE・DELETE といった基本命令を「どの場面で、どのように使うべきか」判断できるようになります。とくに企業システムでは、膨大なデータを扱うため、プログラムの書き方ひとつが業務効率に大きく影響します。EXEC SQL の基礎を確実に押さえておくことは、プログラマとして欠かせない視点です。 また、ホスト変数の使い方はデータ取得の正確性を左右するため、PICの定義や型の違いにも注意を払う必要があります。文字列ならPIC X、数値ならPIC 9 といった基本を意識しながら、SQLが返す値を正確に保持できるようにすることが大切です。こうした積み重ねが、堅牢で安定したプログラムの土台になります。
生徒
「先生、今日のEXEC SQLの内容を振り返ってみると、COBOLって思ったより柔軟にデータベースとやり取りできるんですね。」
先生
「その通りです。COBOLは古い言語というイメージが強いですが、企業システムの中心として現在も広く使われており、SQLとの組み合わせによって強力な処理を書くことができますよ。」
生徒
「ホスト変数に値を入れて受け取る仕組みも、実際に見てみると便利ですね。SQLCODE のチェックも大切なんだと理解できました。」
先生
「エラー処理は現場で特に重要になるので、今日学んだ流れは必ず覚えておきましょう。CONNECT、SELECT、更新処理、COMMIT、DISCONNECT。この一連の流れを自然に書けるようになれば、実務レベルで活用できます。」
生徒
「これでデータベースを扱うプログラムが書けるイメージがつきました!次はもっと複雑なSELECTやJOINも挑戦してみたいです。」
先生
「良い心がけですね。基本をしっかり身につければ、応用は自然とできるようになりますよ。」