COBOLでデータベース接続を理解しよう!初心者でもわかる基本の考え方
生徒
「先生、COBOLのプログラムってデータベースとやり取りできるんですか?」
先生
「もちろんできますよ!銀行の口座情報や顧客データなど、多くのCOBOLシステムはデータベースとつながっています。」
生徒
「でも、どうやって接続するんですか?パソコンでファイルを開くのとは違うんですよね?」
先生
「そのとおりです。COBOLでデータベースを操作するには、『埋め込みSQL(エンベデッドSQL)』という仕組みを使うんです。今日はその基本的な考え方を一緒に学びましょう。」
1. COBOLとデータベースの関係とは?
COBOL(コボル)は、もともと業務システムを作るために生まれた言語です。銀行、保険、物流などで使われるシステムの多くは「大量のデータ」を扱うため、データベースと連携することが欠かせません。データベースとは、顧客情報や商品情報などを整理して保管する「データの倉庫」のようなものです。
COBOLが扱うデータベースには、主に以下のような種類があります。
- DB2(ディービーツー):IBM製の大規模業務システム向けデータベース
- Oracle Database:多くの企業で使われている商用データベース
- PostgreSQLやMySQLなどのオープンソース系データベース
COBOLでは、これらのデータベースに「SQL文(エスキューエルぶん)」を使ってアクセスします。SQLとは「Structured Query Language(構造化問い合わせ言語)」の略で、データを取り出したり登録したりするための共通の言葉です。
2. 埋め込みSQLとは?
COBOL単体ではデータベースと直接通信できません。そのため、SQL文をCOBOLのプログラム内に書いて、データベースに指示を出す方法を使います。それが埋め込みSQL(Embedded SQL)です。
イメージとしては、「COBOLが事務員さん、SQLがデータベースに話しかける手紙」という感じです。COBOLがSQL文を使って「このデータを教えて」と依頼すると、データベースが結果を返してくれるのです。
EXEC SQL
SELECT CUSTOMER-NAME, BALANCE
INTO :WS-CUST-NAME, :WS-BALANCE
FROM CUSTOMER-TABLE
WHERE CUSTOMER-ID = :WS-CUST-ID
END-EXEC.
上のコードでは、EXEC SQL ~ END-EXECの間にSQL文が書かれています。:(コロン)がついた変数(例::WS-CUST-ID)は、COBOLの中で定義された変数です。SQLが取得した結果をCOBOLの変数に受け渡すことで、プログラム内で扱えるようになります。
3. データベース接続の基本手順
COBOLでデータベースに接続してデータを扱うには、いくつかのステップがあります。順番に見ていきましょう。
- データベースとの接続を開始する
- SQL文でデータを操作する(検索・追加・更新・削除)
- 接続を終了する
この流れは、まるで「お店で商品を注文する」ようなものです。まずお店(データベース)に入って(接続)、注文をして(SQLを実行)、帰る(接続終了)という手順です。
EXEC SQL
CONNECT TO 'SAMPLEDB' USER 'COBOLUSER' USING 'PASSWORD'
END-EXEC.
EXEC SQL
SELECT COUNT(*) INTO :WS-COUNT
FROM EMPLOYEE
END-EXEC.
EXEC SQL
DISCONNECT CURRENT
END-EXEC.
このサンプルでは、「SAMPLEDB」というデータベースに接続し、社員数を数えてから切断するという処理をしています。CONNECTで接続し、DISCONNECTで終了する、という流れが基本です。
4. データベース接続に必要な環境設定
COBOLでデータベースを使うには、あらかじめ環境を整えておく必要があります。特に、プリコンパイルという手順が重要です。プリコンパイルとは、「COBOLのプログラムの中にあるSQL文をあらかじめ変換して、COBOLが理解できる形にする」ことです。
たとえば、IBMのDB2を使う場合、以下のような流れになります。
- COBOLのソースに
EXEC SQLでSQL文を書く - プリコンパイラ(PRECOMPILER)でSQLをCOBOLに変換
- COBOLコンパイラで通常どおりコンパイルして実行
このように、データベースとやり取りするCOBOLプログラムは、少し特別な手順を踏む必要があります。これを知っておくことで、エラーの原因を理解しやすくなります。
5. 実際のプログラム例を見てみよう
では、COBOLで実際にデータベースから社員の情報を取得するサンプルを見てみましょう。ここでは、社員IDを入力して、名前と部署名を取得するプログラムを例にします。
IDENTIFICATION DIVISION.
PROGRAM-ID. DB-CONNECT-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-EMP-ID PIC 9(5).
01 WS-EMP-NAME PIC X(30).
01 WS-DEPT PIC X(20).
EXEC SQL
INCLUDE SQLCA
END-EXEC.
PROCEDURE DIVISION.
DISPLAY "社員IDを入力してください:".
ACCEPT WS-EMP-ID.
EXEC SQL
CONNECT TO 'EMPDB' USER 'USER1' USING 'PASS1'
END-EXEC.
EXEC SQL
SELECT EMP-NAME, DEPT-NAME
INTO :WS-EMP-NAME, :WS-DEPT
FROM EMPLOYEE
WHERE EMP-ID = :WS-EMP-ID
END-EXEC.
DISPLAY "名前:" WS-EMP-NAME.
DISPLAY "部署:" WS-DEPT.
EXEC SQL
DISCONNECT CURRENT
END-EXEC.
STOP RUN.
実行結果のイメージ:
社員IDを入力してください:
10001
名前:山田太郎
部署:営業部
このように、COBOLのプログラムでSQL文を直接書くことで、データベースとやり取りができます。SQLCA(SQL Communication Area)は、SQLの実行結果やエラー情報を格納する領域で、ほとんどのCOBOLデータベース連携で使われます。
6. まとめると理解しやすいポイント
- COBOLでデータベースを扱うには、埋め込みSQLを使う
- SQL文は
EXEC SQL ~ END-EXECで囲む - 変数をやり取りするときは
:をつける - 接続(CONNECT)と切断(DISCONNECT)を忘れずに行う
COBOLとデータベースの連携は、実務システムでは欠かせない重要なスキルです。最初は少し難しそうに感じるかもしれませんが、仕組みを理解すればとても論理的で扱いやすいものです。