ホスト変数次へ

第 1 章 はじめに


備考:このドキュメントでは、SQL 構文や戻されるエラーメッセージ、および本製品の COBOL 環境以外での SQL の使用方法の詳細は説明していません。これらの情報については、使用しているデータベースの付属ドキュメントを参照してください。


1.1 概要

COBOL プログラムからリレーショナルデータベースにアクセスするには、プログラムに SQL 文を埋め込み、SQL プリプロセッサを呼び出して、SQL 文をデータベースソフトウェアへの適切な呼び出しに変換する必要があります。次の方法で行うことができます。

次の節では、Server Express とともに提供される 3 つのプリプロセッサを紹介します。

1.1.1 OpenESQL

OpenESQL は、ODBC (Open Database Connectivity) ドライバが利用できる UNIX プラットフォームに提供されます。

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

個別のプリプロセッサとは異なり、OpenESQL は、アプリケーションのコンパイル時に、SQL 指令を指定することによって制御されます。Oracle、Sybase、Informix などの、主要なリレーショナルデータベース用に、高性能の ODBC ドライバのセットが、提供されています。

Server Express の OpenESQL は、Micro Focus Net Express を使用して開発されたアプリケーションと互換性があります。これは、Net Express の OpenESQL Assistant を使用して開発されたアプリケーションが、UNIX プラットフォームへ容易に移植可能であることを意味します。

アプリケーションがさまざまなリレーショナルデータベースシステムを使用するよう設計されている場合や、今後どのリレーショナルデータベースシステムを使用するのか決まっていない場合は、OpenESQL を使用します。

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

Oracle データベースを使用しており、ORACLEOCI に設定された TARGETDB 指令でコンパイルする場合に、アプリケーションは実行時に ODBC 呼び出しではなく OCI 呼び出しを行います。これは、配備されたアプリケーションが、ODBC ドライバを必要としないことを意味しますが、ODBC ドライバを使用したほうが、コストとパフォーマンスの点で有利である可能性があります。詳しくは、『OpenESQL』の章の『Oracle OCI サポート』を参照してください。

1.1.2 DB2 ECM

DB2 外部チェッカー モジュール(ECM)は、Micro Focus COBOL コンパイラとの連携を重視した新しいタイプの統合型プリプロセッサです。埋め込み SQL 文を対応する DB2 データベース サービスに変換します。DB2 ECM は次の各ツールとともに使用できます。

DB2 データベースサービスにアクセスする INT または GNT プログラムをコンパイルして実行するには、DB2 UDB Software Development Kit (バージョン 6.1 以前) をインストールする必要があります。EXE プログラムをコンパイルして実行するには、DB2 UDB Applicatinon Development Client (バージョン 7.1 以降) をインストールする必要があります。

DB2 ECM の使いかたについては、『DB2』の章を参照してください。

1.1.3 COBSQL

COBSQL は、リレーショナルデータベースベンダが提供している COBOL プリコンパイラ向けの統合型プリプロセッサです。COBSQL は次の各ツールとともに使用できます。

旧バージョンの Micro Focus COBOL で上記のいずれかのプリコンパイラを使用して開発したアプリケーションを現バージョンの ServerExpress に移行する場合には、COBOL プリプロセッサとして COBSQL を選択してください。

COBSQL の使いかたの詳細については、『COBSQL』の章を参照してください。


備考


1.2 埋め込み SQL

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

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

EXEC 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 コードは記述できません。

EXEC SQL と END-EXEC キーワードの間には、どの SQL 文でも使用することができます。標準 SQL の記述方法については、本書の説明範囲外のため、リレーショナルデータベースから提供されるリファレンスマニュアルや、SQL に関する多くの参考書の中からいずれかを参照する必要があります。ただし、埋め込み SQL は、標準 SQL 文の動作の変更や、機能の追加により、標準 SQL から拡張されているため、これらの拡張については、以下の表にまとめてあります。

これらの各文の構文に関する詳しい説明は、その使用例とあわせて、付録の『埋め込み SQL 文』に記載されています。

SQL 文
機能
BEGIN DECLARE SECTION ホスト変数宣言セクションの開始を示します。
BEGIN TRANSACTION3 トランザクションを AUTOCOMMIT モードで開きます。
CALL3 ストアドプロシージャを実行します。
CLOSE OPEN ステートメントで開始された行単位のデータ取り込みを終了します。
COMMIT トランザクションをコミットします。
COMMIT WORK RELEASE4 トランザクションをコミットして、データベースとの接続を切断します。
CONNECT データベースに接続します。
DECLARE CURSOR 行単位のデータ取り込み用のカーソルを定義します。
DECLARE DATABASE データベースを識別します。
DELETE (POSITIONED)1 カーソル位置の行を削除します。
DELETE (SEARCHED) 表から検索条件に一致する行を削除します。
DESCRIBE SQLDA データ構造体にデータを設定します。
DISCONNECT2 1 つまたはすべてのデータベースとの接続を切断します。
END DECLARE SECTION ホスト変数宣言セクションの終了を示します。
EXECSP3 ストアドプロシージャを実行します。
EXECUTE 名前に関連付けられた SQL 文を実行します。
EXECUTE IMMEDIATE 指定されたホスト変数に格納された SQL 文を実行します。
FETCH 指定されたカーソルの次の行を結果セットから取り込みます。
INCLUDE アプリケーションで使用する特定の SQL 構造体を定義します。
INSERT 表やビューにデータを追加します。
OPEN 指定カーソルを基準として行単位のデータ取り込みを開始します。
PREPARE SQL 文を名前に関連付けます。
QUERY ODBC3 ODBC データディクショナリへの照会を実行します。
ROLLBACK 現在のトランザクションをロールバックします。
ROLLBACK WORK RELEASE4 トランザクションをロールバックして、データベースとの接続を切断します。
SELECT DISTINCT カーソル名を SQL 文に関連付けます。
SELECT INTO1 結果を 1 行取り込みます(単独選択とも呼ばれます)。
SET AUTOCOMMIT3 AUTOCOMMIT モードを制御します。
SET CONCURRENCY3 標準モードカーソルの並行オプションを設定します。
SET CONNECTION3 以降の SQL 文に使用するデータベース接続を指定します。
SET OPTION3 クエリー処理オプションの値を割り当てます。
SET SCROLLOPTION3 標準モードカーソルのスクロール方法と行グループを設定します。
SET TRANSACTION ISOLATION3 接続にトランザクション分離レベルを設定します。
UPDATE (POSITIONED)1 カーソル位置の行データを変更します。
UPDATE (SEARCHED) データの追加や修正によって既存行のデータを変更します。
WHENEVER SQL 文実行後のデフォルト処理として、CONTINUE、GOTO、PERFORM のいずれかを指定します。

注:

上記の表についての注意点は以下のとおりです。

  1. これらの埋め込み SQL 文は、対応する標準 SQL 文と同じ名前ですが、構文が拡張されています。構文についてはオンラインヘルプをご覧ください。

  2. COBSQL を通じて Oracle データベースにアクセスする場合に、DISCONNECT 文はサポートされません。

  3. DISCONNECT 文は、COBSQL で Oracle データベースにアクセスしている場合には無効です。

  4. Oracle データベースにアクセスする場合は、これらの文が COBSQL によってのみサポートされます。

1.2.1 大文字と小文字の扱い

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

EXEC SQL CONNECT exec sql connect Exec Sql Connect

上記の 3 行は、いずれも同じ文として認識されます。

カーソルや SQL 文、および接続の名前は大文字と小文字が区別されます。したがって、これらの変数を参照する際には、宣言時の記述に合わせる必要があります。たとえば、C1 で宣言したカーソルは、かならず C1 で参照します(c1 では参照できません)。

その他の表や列などの項目名については、データベースの設定によって大文字と小文字の扱いが決定されます。

表や列の名前などの SQL 識別子にはハイフン(-)は使用できません。

1.3 アプリケーションの作成

埋め込み SQL 文を含む COBOL プログラムをコンパイルする際には、適切なコンパイラ 指令を指定して、埋め込み SQL 文を対応するデータベースの関数呼び出しに変換する必要があります。

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

複数の埋め込み SQL のソースファイルは、個別にコンパイルされて 1 つの実行ファイルにリンクされますが、実行時には同じデータベース接続を共有することができます。これは、呼び出し可能な個別の共有オブジェクトにコンパイルされるプログラムにも当てはまります。後続のプログラムモジュール (同じプロセス中の) が CONNECT 文を処理しない場合は、CONNECT 文を含むモジュールと同じデータベース接続を共有します。

OpenESQL
個別にコンパイルした複数のモジュールを 1 つのプログラムにリンクする(または 1 つのプログラムから呼び出す)場合には、SQL コンパイラ 指令の INIT オプションをいずれか 1 つのモジュールのみに記述します。その他のモジュールでは、INIT オプションで自動的に確立されたデータベース接続を共有するか、または CONNECT 文で必要に応じて接続先データベースを切り替えます。

OpenESQL - DB2

COBSQL
複数の INIT 指令が検出された場合に、COBSQL は最初の INIT 指令のみを処理し、それ以降のこの指令を無視します。


Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書ならびに使用されている固有の商標と商品名は国際法で保護されています。

ホスト変数次へ