OSSコンソーシアムのオープンCOBOLソリューション部会が提供する Open COBOL ESQL をMacにインストールして、PostgreSQLにアクセスするCOBOLプログラムをコンパイル・動作させます。
前提条件
Open COBOL ESQLのコンパイルに必要なPostgreSQLをインストールしてください。
opensource COBOLをインストールして、COBOLプログラムをコンパイルできるようにしてください。opensource COBOLのインストールについてはこちらの記事が参考になります。
Open COBOL ESQL のインストール
Open COBOL ESQLのダウンロードサイトからOpen COBOL ESQLのソースパッケージ(2017年2月9日時点ではocesql-1.1.0.tar.gz)をダウンロードします。
Open COBOL ESQLのソースパッケージを展開し、#include <malloc.h>
を#include <stdlib.h>
に置き換えます。置き換えをしないと、fatal error: 'malloc.h' file not found
のエラーでコンパイルが失敗します。
$ tar zxf ocesql-1.1.0.tar.gz
$ cd ocesql-1.1.0
$ sed s/"\#include \<malloc.h\>"/"\#include \<stdlib.h\>"/g dblib/ocdb.c > tmp
$ mv tmp dblib/ocdb.c
$ sed s/"\#include \<malloc.h\>"/"\#include \<stdlib.h\>"/g dblib/ocdbutil.c > tmp
$ mv tmp dblib/ocdbutil.c
$ sed s/"\#include \<malloc.h\>"/"\#include \<stdlib.h\>"/g dblib/ocesql.c > tmp
$ mv tmp dblib/ocesql.c
$ sed s/"\#include \<malloc.h\>"/"\#include \<stdlib.h\>"/g dblib/ocpgsql.c > tmp
$ mv tmp dblib/ocpgsql.c
$ sed s/"\#include \<malloc.h\>"/"\#include \<stdlib.h\>"/g ocesql/parser.c > tmp
$ mv tmp ocesql/parser.c
PostgreSQLインストールディレクトリのincludeとlibをCPPFLAGSとLDFLAGSに設定した上で、Open COBOL ESQLをコンパイル、インストールします。
$ export CPPFLAGS="-I/opt/pgsql/include"
$ export LDFLAGS="-L/opt/pgsql/lib"
$ ./configure
$ make
$ sudo make install
PostgreSQLにアクセスするCOBOLプログラムの作成と実行
ソースファイル randomnum.cbl (拡張子はcbl) に以下のとおりコーディングします。コードの各行は8桁目以降から始まっていることに注意してください。このCOBOLプログラムは、PostgreSQLにアクセスして、ランダムな整数を取得し、表示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. RANDOMNUM.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 RET PIC 9(3).
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 DBNAME PIC X(32) VALUE "postgres".
01 USERNAME PIC X(32) VALUE "postgres".
01 PASSWORD PIC X(32) VALUE SPACE.
EXEC SQL END DECLARE SECTION END-EXEC.
EXEC SQL INCLUDE SQLCA END-EXEC.
PROCEDURE DIVISION.
MAIN.
EXEC SQL
CONNECT :USERNAME IDENTIFIED BY :PASSWORD
USING :DBNAME
END-EXEC.
EXEC SQL
SELECT round(random()*100) INTO :RET
END-EXEC.
EXEC SQL
DISCONNECT ALL
END-EXEC.
DISPLAY RET.
STOP RUN.
Open COBOL ESQL でプリコンパイルします。
$ ocesql randomnum.cbl randomnum.cob
次に、環境変数COBCPYに Open COBOL ESQL ソースディレクトリ配下のcopyディレクトリのパスを指定した上で、コンパイル対象のファイルは、プリコンパイル結果の randomnum.cob (拡張子がcob) をコンパイルします。コンパイル時には、PostgreSQLインストールディレクトリのlibを-L
に指定し、また-locesql
と-lpq
も指定してください。
$ export COBCPY=/opt/ocesql-1.1.0/copy
$ cobc -x -locesql -lpq -L/opt/pgsql/lib randomnum.cob
最後に、PostgreSQLを別途起動した上で、COBOLプログラムを実行します。
## 事前にPostgreSQLを起動しておくこと
$ ./randomnum
060
$ ./randomnum
083