COBOLはOracleやDB2等のリレーショナルデータベースと連携することが可能です。
単に opensource COBOL を入れただけだとデータベース連携はできませんが、書き方の簡単な紹介だけでもしてみます。
【参考文献】
今回の記事は以下のページを参考にして作成しています。
COBOLでOracleと接続する際のマニュアルです。
ProCOBOL プログラマーズ・ガイド -- 目次
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/E05652-01/toc.html
【基本的なプログラムの作り方】
業務プログラムを製造する者としては、最低限以下の文法を抑えておけば良いでしょう。
以下の文法だけでは不十分ですが、これで足りない分は現場毎で補足されるはずです。
・単発のSQL発行
以下のように EXEC SQL文でSQL発行が可能です。
:がついている変数はCOBOL中で定義された変数(ワークエリア)を指しています。
SELECT文のINTO句はSELECT文の発行結果をCOBOLの変数に入れるためのもので、ENAME列の値がEMP-NAME、JOB列の値がJOB-TITLE、SAL列の値がSALARYにセットされます。
以下はSELECT文を発行する例ですが、INSERT文やUPDATE文やDELETE文、COMMIT文やROLLBACK文も発行可能です。
なお、本当はSQLの戻り値に応じたエラーハンドルやNULL値が返された場合のロジック(多くの場合はLOW-VALUEに置き換える)が必要です。
また、複数行返されるSELECT文の場合は、後述するカーソルが必要です。
EXEC SQL EXECUTE
BEGIN
SELECT ENAME, JOB, SAL
INTO :EMP-NAME, :JOB-TITLE, :SALARY
FROM EMP
WHERE EMPNO = :EMP-NUMBER;
END;
END-EXEC.
・カーソルの使用
複数行返されるSELECT文を発行する場合は、カーソルを使用して1行1行取得する必要があります。
まず、下記のようにCURSOR文を発行し、カーソルを定義します。
下記の例ではカーソル名は「EMPCURSOR」になります。
EXEC SQL DECLARE EMPCURSOR CURSOR
FOR SELECT ENAME, JOB, SAL
FROM EMP
WHERE DEPTNO = :DEPTNO
END-EXEC.
次に、定義したカーソルをOPENします。
これでデータ取得が可能になります。
EXEC SQL OPEN EMPCURSOR END-EXEC.
次に、SELECT文の結果をFETCH文で1行1行取得します。
(ロジック中では、ファイルで言うREAD文と同じように、1件先読み及びループ中で使用します)
EXEC SQL FETCH EMPCURSOR INTO :EMP-NAME, :JOB-TITLE, :SALARY END-EXEC.
必要な結果をFETCH文で取得したら、最後にカーソルをCLOSEします。
EXEC SQL CLOSE EMPCURSOR END-EXEC.