8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Mac上でCOBOLからPostgreSQLにアクセス

Posted at

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
8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?