データベースアクセス機能

ここでは、データベースアクセス機能の概要を説明します。

概要

Visual COBOL には、多くの SQL プリプロセッサ (OpenESQL、DB2 ECM、および COBSQL) が組み込まれています。これらのプリプロセッサにより、COBOL プログラム内に埋め込み SQL 文を記述してリレーショナルデータベースにアクセスできます。次のプリプロセッサが使用できます。

以降では、Visual COBOL に付属の 3 つのプリプロセッサを説明します。

OpenESQL

OpenESQL は、ODBC が使用可能なデータソースにアクセスする COBOL アプリケーションで埋め込み SQL を利用できる統合プリプロセッサです。

個別のプリプロセッサとは異なり、OpenESQL は、アプリケーションのコンパイル時に SQL 指令を指定して制御します。

アプリケーションが異なるリレーショナルデータベースシステムで設計されている場合、または、次回に採用するリレーショナルデータベースシステムが決定していないような場合は、OpenESQL を使用します。

OpenESQL の詳細は、『OpenESQL』の章を参照してください。

DB2 ECM

DB2 ECM (external checker module; 外部チェッカーモジュール) は、このシステムが提供する統合プリプロセッサであり、Micro Focus COBOL コンパイラとより密接に動作するように設計されています。DB2 ECM は、埋め込み SQL 文を DB2 データベースサービスへの適切な呼び出しに変換します。

DB2 ECM の詳細は、『DB2』の章を参照してください。

COBSQL

COBSQL は、リレーショナルデータベースのベンダが提供している COBOL プリコンパイラ向けの統合プリプロセッサです。

すでに上記のプリコンパイラを Micro Focus COBOL の旧製品とともに使用しており、作成済みのアプリケーションを Net Express に移行する場合、または、UNIX に展開して Oracle または Sybase のリレーショナルデータベースにアクセスするアプリケーションを開発している場合には、COBSQL を使用することをお奨めします。それ以外の場合の埋め込み SQL アプリケーションの開発には、OpenESQL を使用することをお奨めします。

COBSQL の詳細は、『COBSQL』の章を参照してください。

注:COBSQL プリプロセッサは、標準的な手続き型 COBOL プログラムのみサポートされます。オブジェクト指向 COBOL の構文 (OO プログラム) と入れ子を使用するプログラムでは、COBSQL を使用できません。

埋め込み SQL

各プリプロセッサは、COBOL プログラム内に記述された埋め込み SQL 文を取り出し、対応するデータベースの関数呼び出しに変換します。

COBOL プログラム内に埋め込み SQL 文を記述する際には、その前に次のキーワードを記述する必要があります。

EXEC SQL

SQL 文の後には次のキーワードを記述します。

END-EXEC

次に例を示します。

     EXEC SQL
         SELECT au_lname INTO :lastname FROM authors
          WHERE au_id = '124-59-3864'
     END-EXEC

埋め込み SQL 文は、必要に応じて複数の行に続けて記述できます。その際の継続に対する規則は、通常の COBOL 規則に従います。ただし、EXEC SQL と END EXEC キーワードの間に記述できるのは埋め込み SQL 文のみで、通常の COBOL コードは記述できません。

多くのデータベースソフトウェア製品には、埋め込み SQL 文に関する情報を網羅した SQL リファレンスマニュアルが付属しています。ただし、次に挙げるような基本的なデータベース操作を実行できることが前提になります。

操作 SQL 文
テーブルへのデータの追加 INSERT
テーブル内のデータの変更 UPDATE
テーブルからの行データの取得 SELECT
名前付きカーソルの作成 DECLARE CURSOR
カーソルを使用した複数行のデータの取得 OPEN、FETCH、CLOSE

完全な構文の説明は、その使用例とともに、各埋め込み SQL 文のオンラインヘルプに記載されています。

大文字と小文字の扱い

プログラム内に記述した埋め込み SQL キーワードでは、大文字と小文字は区別されません。次に例を示します。

EXEC SQL CONNECT 
exec sql connect 
Exec Sql Connect

これらの 3 つの行は、同じ文として認識されます。

カーソル名、文名、および接続名の大文字小文字は、変数が宣言されたときに使用したものと一致する必要があります。たとえば、C1 というカーソルを宣言する場合には、常に C1 (c1 ではなく) で参照しなければなりません。

特定のデータベースの設定によって、接続名、テーブル名やカラム名などの大文字と小文字の扱いが決定されます。

テーブルやカラム名などの SQL 識別名にはハイフン (-) を使用できません。

OpenESQL アシスタント

Net Express には、OpenESQL アシスタントが組み込まれています。この対話型ツールを使用して、SQL SELECT、INSERT、UPDATE、DELETE、およびストアドプロシージャ文のプロトタイプを作成し、それらの文をデータベースに照らし合わせてテストできます。

詳細は、『OpenESQL アシスタント』の章を参照してください。

アプリケーションのビルド

埋め込み SQL を含む COBOL アプリケーションの記述を終えたら、適切なコンパイラ指令を指定してコンパイルし、プリプロセッサで埋め込み SQL 文をデータベースの関数呼び出しに変換する必要があります。

複数のプログラムモジュール

複数の埋め込み SQL ソースファイルは、個別にコンパイルして同じ実行可能ファイルにリンクすれば、実行時に同じデータベース接続を共有できます。独立した動的リンクライブラリ (.dll ファイル) にコンパイルされるプログラムでも同様です。同じプロセス内の後続のプログラムモジュールが CONNECT 文を処理しない場合には、それらのモジュールは、CONNECT 文をインクルードしたモジュールと同じデータベース接続を共有します。

OpenESQL

個別にコンパイルされた複数のモジュールを含むプログラムでは、SQL コンパイラ指令の INIT オプションを使用して 1 つのモジュールのみをコンパイルしてください。プログラム内の他のすべてのモジュールは最初の自動接続を共有するか、または、CONNECT 文を使用して明示的に接続します。

OpenESQL - DB2

COBSQL

COBSQL では、INIT 指令を複数回指定すると、2 回目以降の指令が無視されます。