COBOLからODBC経由でデータベースに接続する


COBOLからODBC経由でデータベースに接続する

レガシーCOBOLアプリケーションでは、データベース接続を言語レベルでサポートしていません。したがって、データベース接続には通常Oracle Pro*COBOLといったプリプロセッサでCOBOLソースにSQLを組み込み、あらかじめCOBOLコードに変換後、COBOLコンパイルを行っていました。

プリプロセッサはデータベース・ベンダより提供されるため、COBOL処理系だけでなくデータベースもベンダ・ロックインされることになります。

COBOLアプリケーションのODBC対応

オープン系のCOBOLコンパイラにはODBCインターフェースをサポートしている製品がほとんどです。

「ODBCインターフェースをサポート」=「先の組込SQLに関する機能を有する」

と言えます。

MicorFocus COBOLは、OpenESQLプリプロセッサを備えた統合コンパイラですし、静的SQLをサポートするCOBOL処理系も存在しています。これらは、Pro*COBOLと完全互換があるわけではないのですが、Oracleのバージョン互換性制限やデータベースをロックインされないというメリットがあります。

各COBOLコンパイラのプリプロセッサ機能については、COBOLコンパイラメーカに一度お問い合わせくださいませ。

DataDirect Connectを利用してみる

ODBCインターフェース利用時にDataDirectを使うと、前述のODBCドライバ・マネージャとODBCドライバを同一ドライバで統一することができます。
Windowsプラットフォームの場合は、ODBCドライバ・マネージャはWindowsに付属のものをODBCドライバはデータベース・ベンダの純正ドライバを使うことでさほど違和感がないのですが、Linuxをはじめとするunix環境ではunixODBCをODBCドライバ・マネージャに利用しなければなりません。
DataDirectはHP-UX、Solaris、Linux、AIXなど各種UNIXプラットフォームを幅広くサポートしていますので、上記のようにunixODBCを利用することがなくすべてサポートのある構成を取れます。

Pro*COBOL資産をODBC仕様に書き換える

ここが一番の難関ではありますが。。。

いきなりJavaで書き換えましょう!というよりは、幾分ハードルは下がるかと思います。また、データベースを他のベンダのもの、たとえばPostgreSQLに置き換えるといった場合、保守費用が大幅に下がる可能性があります。

それほどの大手術ではありません(といいつつ、保証はできませんので、COBOLベンダのマニュアルを確認する必要あり)ので、一度検討されてはいかがでしょうか。

OpenESQLでのSQL埋め込み例

      *    Connect to the specified database
       EXEC SQL
               CONNECT TO :svr USER :usr WITH NO PROMPT
       END-EXEC
       if sqlcode not = 0
        display "Error: cannot connect "
        display sqlcode
        display sqlerrmc
        stop run
       end-if

まとめ

COBOL資産は、しかるべきタイミングでオープン系言語で置き換えるべきかと思いますが、現実的に一度にやれるものでもありませんので、このような技術を用いながら来るべきデジタル・トランスフォーメーションに備えるというのも良いのかもしれません。