DB2

ここでは、埋め込み SQL 文をもつ COBOL プログラムから DB2 データベースへアクセスする方法を説明します。

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

文字データ

文字データに対して適切なデータ型を使用するように注意が必要です。254 文字以下の固定長の文字列の場合は、CHAR データを使用します。254 文字を超える固定長文字列、および可変長文字列の場合は、VARCHAR データを使用します。詳細は、『データ型』の章にある『文字データ型』の節を参照してください。

追加データ型

データ型』の章で説明しているデータ型以外にも、DB2 は DECIMAL データ型をサポートします。DECIMAL データ型は、パック 10 進数項目を記述します。小数点がある場合とない場合があります。COBOL ではこのような項目を COMP-3 または PACKED-DECIMAL として宣言できます。

追加データ型は、次の SQL 構文を使用して宣言してください。

>>--level_number--name-+------------+-SQL-+-----------+-->
                       |            |     |           |
                       +-USAGE-+----+     +-TYPE-+----+
                               |    |            |    |
                               +-IS-+            +-IS-+

 >--sql_type--+----------+--><
              |          |
              +-(-size-)-+

構文の詳細は、次のとおりです。

level_number 1 ~ 48 の範囲内。
sql_type 次の新 SQL データ型の 1 つ。BLOB、CLOB、DBCLOB、BLOB-FILE、CLOB-FILE、DBCLOB-FILE、BLOB-LOCATOR、CLOB-LOCATOR、DBCLOB-LOCATOR、または TIMESTAMP。TIMESTAMP 型 は DB2 V5.2 では新型でないので、DB2 ECM でも提供されています。
size BLOB 型、CLOB 型、および DBCLOB 型の場合には必ず指定します。K (KB)、M (MB)、または G (GB) で修飾できます。

VALUE 句は、新 SQL データ型では許可されていません。

指定する sql_type によって、実際に生成されるデータは基本項目または集団項目になります。集団項目の要素名は自動的に生成されます。

次の表は、SQL 構文を使用して生成したデータ項目の構造を、等価のネイティブな COBOL 定義で示したものです。どちらの場合も同じデータが生成されますが、DB2 ECM で使用可能なホスト変数として認識されるには、項目は SQL 構文を使用して宣言する必要があります (これは、COBOL の定義があいまいなためです。多くの新しい SQL 型と個々のホスト変数に展開される集団項目は、COBOL では区別できません)。既存のデータ型はすべて引き続き、通常の COBOL 構文を使用して宣言してください。例外は TIMESTAMP のみです。TIMESTAMP はどちらの形式を使用しても宣言できます。

SQL 構文 等価の COBOL 構文
01  MY-BLOB SQL BLOB(125M).
01  MY-BLOB.
   49  MY-BLOB-LENGTH PIC S9(9) COMP-5.
   49  MY-BLOB-DATA   PIC X(131072000).
03  A SQL CLOB(3K).
03  A.
   49  A-LENGTH PIC S9(9) COMP-5.
   49  A-DATA   PIC X(3072).
03  HV SQL DBCLOB(125).
03  HV.
   49  HV-LENGTH PIC S9(9) COMP-5.
   49  HV-DATA   PIC G(125).
01  B SQL BLOB-LOCATOR.
01  B PIC S9(9) COMP-5.
01  C SQL CLOB-FILE.
01  C.
   49  C-NAME-LENGTH  PIC S9(9) COMP-5.
   49  C-DATA-LENGTH  PIC S9(9) COMP-5.
   49  C-FILE-OPTIONS PIC S9(9) COMP-5.
   49  C-NAME         PIC X(255).
01  TS SQL TIMESTAMP.
01  TS PIC X(29).

複合 SQL

現在 DB2 V2 で使用可能な拡張形式も含め、複合 SQL をサポートしています。不完全な複合 SQL 文は DB2 ECM で検知され、エラーが発生します。ただし、DB2 はこの状態から常に回復するとは限りません。プログラムソース後半の有効な SQL 文がさらにエラーを起こす場合がありますので、注意してください。

ユーザ定義関数

ユーザ定義関数 (user defined function; UDF) への参照を含むプログラムは、他のモジュールを呼び出します。これは、そのモジュールに、適切な値を返す、ユーザ提供のコードが含まれているからです。UDF コード自体には SQL が含まれません。

埋め込み SQL 文を含むプログラムを実行すると、DB2 が呼び出されます。さらに DB2 が UDF モジュールを呼び出すこともあります。UDF を宣言する際には、このモジュールが記述された言語を指定する必要があります。一部のプラットフォームでは COBOL でモジュールを記述できますが、現在 DB2 で指定できる言語は C のみです。次の例は、これらがどのように行われるかを示しています。ユーザ定義関数とパラメータ記述の詳細は、DB2 のマニュアルに記載されています。

COBOL で記述されたユーザ定義関数は、現在 UNIX ではサポートされていません。

注:クライアント / サーバの構成では、UDF モジュールはサーバ上で呼び出され、これらの制限はサーバのみに適用されます。サーバに問題がない場合は、どのクライアントも UDF にアクセスできます。

UDF のエントリポイントは、C 呼び出し規約を使用して定義してください。次のサンプルコードでは、指数を計算する単純な UDF を使用および定義しています。

次のプログラム 1 は DB2 への関数を宣言します。このプログラムをコンパイルおよび実行してから、プログラム 2 をコンパイルする必要があります。

exec sql
   create function mfexp(integer, integer)
      returns integer
      fenced
      external name 'db2v2fun!mfexp'
      not variant
      no sql
      parameter style db2sql
      language cobol
      no external action
end-exec

LANGUAGE COBOL 句に注目してください。これは、DB2 構文への拡張として Micro Focus COBOL が提供するものです。この句は LANGUAGE C と等価で、どちらを使用しても、呼び出されるモジュールは C 呼び出し規約に準拠しています。ここでは、EXTERNAL NAME 句で、呼び出されるモジュールの名前を db2v2fun (プラットフォームにより .dll または .dlw の拡張子)、この中のエントリポイントの名前を mfexp と指定します。

次のプログラム 2 は、この UDF を使用します。

     move 2 to hv-integer
     move 3 to hv-integer-2
     exec sql
         values (mfexp(:hv-integer, :hv-integer-2))
          into :hv-integer-3
     end-exec

次のプログラム 3 は、この UDF そのものを含む、純粋な COBOL プログラムです。

$set case
 special-names.
     call-convention 0 is cc.
 linkage section.
 01  a pic s9(9) comp-5.
 01  b pic s9(9) comp-5.
 01  c pic s9(9) comp-5.
 01  an pic s9(4) comp-5.
 01  bn pic s9(4) comp-5.
 01  cn pic s9(4) comp-5.
 01  udf-sqlstate pic x(6).
 01  udf-fname pic x(28).
 01  udf-fspecname pic x(19).
 01  udf-msgtext pic x(71).
 procedure division cc.
    goback
    .
 entry "mfexp" cc
     using a b c an bn cn
           udf-sqlstate
           udf-fname
           udf-fspecname
           udf-msgtext.
     if an not = 0 or bn not = 0
         move -1 to cn
     else
         compute c = a ** b
         move 0 to cn
     end-if
     goback
     .

このモジュールは、動的にロード可能な実行可能プログラム (dll) を作成するためにコンパイルして、オペレーティングシステムが (PATH 上で) 検索できる場所に置く必要があります。

注:エントリポイント名は、すべてのシステムで大文字と小文字が区別されます。大文字と小文字の名前をマッチングさせる場合には、注意が必要です。また、上記のプログラム例での $SET 文 のように、CASE コンパイラ指令を指定する必要があります。

埋め込み SQL サポートの拡張

ここでは、埋め込み SQL サポートの Micro Focus 拡張を説明します。

INCLUDE 文

次の形式の文があります。

exec sql
   include filename
end-exec

この文は、次の文とまったく同じように許可および処理されます。

copy filename
        

インクルードされたファイルには、コピーファイルが含むことのできる COBOL 文をすべて含むことができます。さらに EXEC SQL 文を含むこともできます。

DECLARE TABLE 文

次の形式の文があります。

exec sql
   DECLARE table-name TABLE
   ...
end-exec

この文は許可され、注釈として扱われます。

整数ホスト変数

埋め込み SQL サポートでは、整数の形式を USAGE COMP-5 にする必要があります。ユーザが使用しやすいように、DB2 ECM ではホスト変数に USAGE COMP、COMP-4、および BINARY を使用することもでき、これらの形式を変換する追加コードを生成します。最も効率的なコードが生成されるのは、COMP-5 を使用した場合です。

修飾付きホスト変数

ホスト変数は、DB2 for MVS 互換構文を使用して修飾できます。

たとえば、次のようなホスト変数を定義します。

01 block-1.
   03 hostvar pic s9(4) comp-5.
01 block-2.
   03 hostvar pic s9(4) comp-5.

次のように修飾して、hostvar のどちらのインスタンスを構文で使用するかを指定できます。

exec sql
   fetch s2 into :block-1.hostvar
end-exec

ホスト変数集団とインジケータ配列

集団項目内でホスト変数が宣言されると、これらの変数をそれぞれ参照する必要のある SQL 文が、かわりに集団名を参照することによって、参照を短縮できます。インジケータ変数をこれらのホスト変数と関連付ける必要がある場合には、ホスト変数と同じ数のインスタンスをもつインジケータ変数のテーブルを定義して、このテーブルを参照します (OCCURS 句をもつ項目です。その項目を含む集団項目ではありません)。

たとえば、次のようなホスト変数を定義します。

01  host-structure.
   03 sumh           pic s9(9) comp-5.
   03 avgh           pic s9(9) comp-5.
   03 minh           pic s9(9) comp-5.
   03 maxh           pic s9(9) comp-5.
   03 varchar.
      49 varchar-l   pic s9(4) comp.
      49 varchar-d   pic x(1000).
 01  indicator-table.
     03 indic          pic s9(4) comp-5 occurs 4.
 01  redefines indicator-table.
     03 indic1         pic s9(4) comp-5.
     03 indic2         pic s9(4) comp-5.
     03 indic3         pic s9(4) comp-5.
     03 indic4         pic s9(4) comp-5.

次の手続き文があります。

exec sql fetch s3 into
  :host-structure:indic
end-exec

この手続き文は、次の文と等価です。

exec sql fetch s3 into
  :sumh:indic1, :avgh:indic2, :minh:indic3,
  :maxh:indic4, :varchar
end-exec

宣言された 4 つのインジケータ変数が、はじめの 4 つのホスト変数に割り当てられます。もし 5 つ以上が宣言された場合には、5 つのホスト変数すべてが、1 つのインジケータ変数に関連付けられます。

インジケータ変数のテーブルは、等価の SQL 文を示すためのみに再定義されます (添字指定は SQL 文では許可されていません)。再定義を省略し、COBOL プログラムで添字指定を使用してインジケータ変数を参照することもできます。

NOT 演算 (¬)

DB2 では、演算子 ¬=、¬>、および ¬< を使用できます。これらは、<>、<=、および >= にマップされます。NOT 演算子の文字表現はシステムによって異なるので、DB2 コンパイラ指令の NOT オプションを使用して NOT 演算子を定義できます。

連結演算子 (|)

国によっては、連結演算子に使用される記号は ASCII 文字の (|) ではありません。DB2 ECM では、DB2 コンパイラ指令の CONCAT オプションを使用して、他の ASCII 文字を連結演算子に指定できます。

SQL 通信領域

SQL 文を実行すると、プログラムの SQL 通信領域 (sql communications area; SQLCA) と呼ばれる領域に重要な情報が返されます。通常、SQL 通信領域は、次のような文を使用してユーザのプログラム内に含まれています。

exec sql include sqlca end-exec

この文により、Windows では sqlca.cpy、UNIX では sqlca.cbl というソースファイルがユーザのソースコードにインクルードされます。このソースファイルは、DB2 ECM によって提供され、SQLCA の COBOL 定義を含んでいます。

この文を含めない場合には、DB2 ECM は自動的に領域を割り当てますが、プログラム内でこの領域のアドレスを指定できません。ただし、SQLCODE および SQLSTATE のどちらか一方、または両方を宣言する場合は、DB2 ECM はコードを生成して、各 EXEC SQL 文の後に、SQLCA 領域の対応フィールドをユーザが定義したフィールドにコピーします。

ヒント:ANSI 互換のために、SQLCA 全体を定義することをお奨めします。

MFSQLMESSAGETEXT が定義されている場合には、SQLCODE の非ゼロ条件の後ろで、DB2 ECM は 例外条件の記述をもつ MFSQLMESSAGETEXT データ項目の内容を更新します。この場合は、文字データ項目 PIC X(n) として宣言してください (n には有効な値を指定できます。このメッセージがデータ項目に入りきらない場合には、切り捨てられます)。

SQLCA、SQLCODE、SQLSTATE、および MFSQLMESSAGETEXT は、ホスト変数として宣言する必要はありません。

オブジェクト指向 COBOL 構文のサポート

DB2 ECM はオブジェクト指向 COBOL の構文 (OO プログラム) と動作するように拡張されました。ただし、いくつか制限がありますので、注意してください。

入れ子の COBOL プログラムのサポート

DB2 ECM では、入れ子の COBOL プログラムを使用できます。

デフォルトでは、入れ子の COBOL プログラムのすべてに DB2 インターフェイスコードが生成されます。入れ子のプログラムごとに DB2 インターフェイスコードが生成されないようにするには、DB 指令の IGNORE-NESTED を使用してください。IGNORE-NESTED 指令を適切に使用するには、次の制限に注意してください。

INIT DB2 指令オプション

DB2 の初期のバージョンでは、実行時に SQL 構文でデータベースへ接続する方法を提供していませんでした。そのため、呼び出しを適切な SQL API ルーチンにコード化する必要がありました。Micro Focus 製品の以前のバージョンは、CONNECT 機能を行うために SQLINT モジュールまたは SQLINI2 モジュールを提供していました。これらのルーチンは現在は提供されていません。そのかわりに、DB2 ECM が DB2 コンパイラ指令の INIT オプションの設定に応じて、適切な CONNECT 文を生成します。

INIT オプションには、アプリケーションが異常終了した場合でも、データベース接続を正しく終了させる追加オプションがあります。これにより、データベースの破損を防ぎます。アプリケーションが異常終了した場合には、最後に行った COMMIT 以降の変更はすべてロールバックされます。このデータベース保護は、DB2 コンパイラ指令で INIT=PROT を指定することで選択できます。

INIT オプションは、1 つのアプリケーションに対して一度しか設定できません。他の SQL プログラムから呼び出された SQL プログラムには INIT オプションを設定できません。そのかわりに、実行単位で最初に実行される SQL プログラムに INIT オプションを指定することができます。INIT オプションが設定されているアプリケーションで複数のモジュールをコンパイルする場合は、プログラムが異常終了する可能性があります。

FixPack 8 以降の DB2 UDB 7.2 を使用している場合に、INIT 指令オプションで PASS 指令オプションを指定する場合は、INIT ではデータベースの接続に使用するユーザ ID とパスワードに対して空白のホスト変数は生成されません。このバージョンの DB2 IDB では、これらの変数を空白文字または low-values で CONNET に渡すと、SQL エラーが生成されます。これは、INIT オプション動作の変更点の 1 つです。これらの値でコンパイラされたプログラムは機能しません。プログラムではこれらの指令を使用しないで、SQL CONNECT 文を使用することをお奨めします。

UDB-VERSION DB2 指令オプション

DB2 ECM は、使用している DB2 ユニバーサルデータベースのバージョンに応じて、2 セットある API 呼び出しのどちらかを使用できます。この呼び出しセットは、IBM 社がバージョン 7 から導入した新機能を使用できるようにするため、DB2 UDB バージョン 7.1 以降で使用されます。このバージョンで、IBM 社はプログラム識別子文字列 (program identifier; PID) の長さを 40 バイトから 162 バイトに変更しました。この PID は、コンパイル時に各アプリケーションプログラムに格納されます。8 文字を超える COLLECTION-ID を使用する場合は、新しい PID 構造体を使用する必要があります。

DB2 ECM は、バージョン 7.1 以降の DB2 UDB サーバに接続してプログラムをコンパイルしたときに、自動的により新しい呼び出しセットの使用を試みます。ただし、たとえばバージョン 7.1 のクライアントソフトウェアを使用していない場合や DB2 コネクトを通じて別の DB2 サーバに接続している場合などのように、他の環境でも新しい呼び出しセットを使用したい場合があります。このような場合は、DB2 コンパイラ指令 UDB-VERSION を使用してください。この UDB-VERSION 指令では、使用する DB2 UDB のバージョンを指定できます。指定できる値は、V2、V5、V6、V7、および V8 です。V7 または V8 を指定する場合には、ECM は新しい呼び出しを実行します。デフォルトは DB2 V6 です。次に使用例を示します。

DB2(UDB-VERSION=V7)

DB2 ECM が新しい API を検出できない場合は、次のメッセージが表示されます。

* クリティカルエラー - DB2Initialize API は検出されませんでした。
* 指令 DB2(UDB-VERSION=V6) を使用して
* プログラムをコンパイルしてください。

続いて次のメッセージが表示されます。

** DB00010 DB2 は未指定のオプションを拒否しました。 このエラーは
** SQL 処理の続行を防止します。 - 以後の
** EXEC SQL 文は無視されます。

コンパイル方法

COBOL コンパイラで SQL プログラムをコンパイルするのは次の 2 つの手順と論理的に同等です - プリコンパイルによって SQL 行をホスト言語文に変更し、次に結果ソースをコンパイルする。これらの手順は実際には単一のプロセスで行われており、COBOL コンパイラが DB2 ECM とともに実行します。

SQL プログラムをコンパイルするためには、事前に認証が付与されていることが前提になります。通常、認証の付与は DB2 データベース管理者が行います。次の権限のどれか 1 つが必要です。

ユーザには、アプリケーションで静的 SQL 文をコンパイルするために必要なすべてのテーブル権限も必要です。グループに付与された権限は、静的 SQL 文の権限検査には使用されません。SQL オブジェクトに対する権限がないためにプログラムがコンパイルに失敗した場合は、社内の DB2 データベース管理者に確認してください。

ユーザが SQL を使用しているということや、どのデータベースを使用しているか、という情報を DB2 ECM に与えるには、DB2 コンパイラ指令を使用します。『DB2 コンパイラ指令』の節を参照してください。

DB2 UBD バージョン 7.1 で導入されている API 呼び出しを使用する場合は、DB2 ECM は API 呼び出しを検証するために IBM モジュールを呼び出します。DB2 ECM が指令構文でエラーを検出できない場合は、「-104 SQLCODE」のエラーメッセージが表示されます。

DB2 コンパイラ指令が必要となる場合を除いて、通常、埋め込み SQL を含むプログラムは SQL 以外のプログラムと同じ方法でコンパイルされます。追加モジュールをリンクする必要があるときに実行形式 (バイナリ) ファイルを作成する場合のみに、特別な動作が必要です。SQL コードを含むプログラムは、他のプログラムと同じようにアニメートできます。SQL 文内のホスト変数は、通常の COBOL データ項目と同じように調べることができます。

リモート DB2 サーバを使用するプログラムのコンパイル方法

リモート DB2 サーバを使用するプログラムをコンパイルするには、最初にリモートサーバに接続する必要があります。DB2 ECM は最初に、ログイン時に使用したクライアントワークステーションのデフォルト値を使用してデータベースへの接続を試行します。ログインに失敗した場合には、DB2 ECM は「Micro Focus SQL ログイン」ダイアログを呼び出します。このダイアログには、プログラムをコンパイルするときに使用するデータベースのログイン ID とパスワードを入力できます。次のようなダイアログボックスが表示されます。

「Micro Focus SQL ログイン」ダイアログボックス

図0-1 : 「Micro Focus SQL ログイン」ダイアログボックス

ログオン ID とパスワードをメモリに保存して、次回同じデータベースを使用してプログラムをコンパイルするときにそれらを再入力する手間を省くこともできます。この情報は、クライアントマシンを次に再起動するか、または Net Express のコマンドプロンプトで次のコマンドを入力すると無効になります。

MFDAEMON CLOSE 

自動コンパイル

コマンドファイルなどのバックグランドプロセスからコンパイルを自動化する場合には、グラフィカルなログオンダイアログを表示できないことがあります。環境変数を設定し、ログオン ID とパスワードを含むテキストファイルで変数を示して、ログオン情報を指定できます。これを行うには、環境変数 SQLPASS.TXT に、ログオン ID とパスワードを含むテキストファイルの名前を設定します。次に使用例を示します。

SET SQLPASS.TXT=D:¥BATCH.TXT 

batch.txt ファイルで、ログオン ID とパスワードを id.password の形式で指定します。次に使用例を示します。

MyId.Mypassword

ログオン ID とパスワードの妥当性検査に使用されているセキュリティシステムが大文字と小文字を区別する場合は、テキストファイルで id.password を正しい大文字小文字で指定する必要があります。

注:テキストファイルでログオン ID とパスワードを指定することはセキュリティ上問題があるので、この機能を実装する場合は注意してください。

DB2 コンパイラ指令

他のコンパイラ指令が指定できるところであればどこにでも DB2 コンパイラ指令を指定できます。指定できる箇所の例を次に示します。

IDE から SQL コンパイラ指令を設定する方法の詳細は、ヘルプトピックの『SQL コンパイラ指令オプションの設定』を参照してください。

注:複数の SQL 指令は指定できませんので、1 つの指定箇所に対して 1 つの SQL 指令を指定する必要があります。

DB2 コンパイラ指令オプション

DB2 コンパイラ指令は、オプションのセットで構成されています。詳細は、ヘルプトピックの『DB2 コンパイラ指令』を参照してください。使用可能なオプションの詳細は、ヘルプトピックの『DB2 コンパイラ指令オプション』を参照してください。

コンパイラ指令にはデフォルト値があり、他に値が指定されない場合に使用されます。これは既存の DB2 指令オプションのすべてについても同様です。これらのオプションの多くがコンパイル時に DB2 に直接渡され、値が指定されない場合には、コンパイラのデフォルトが使用されます。ただし、このような場合には、これらのオプションが適切かどうか、およびそのデフォルト値は DB2 の設定に左右されます。特に、DDCS を通じて DRDA サーバに接続されているかどうかに依存します。このため、これらのオプションのデフォルトのコンパイラ設定は「not set」です。この場合は、DB2 には値が渡されず、デフォルト値は (適用可能な場合) DB2 によって判断されます。これらの値については、IBM DB2 の解説書を参照してください。

注:このリストは、DB2 UDB V7.x を使用していることを仮定しています。一部の指令は、DB2 コネクトと DB2 ユニバーサルデータベースを併用してる場合のみに有効です。別のバージョンの DB2 UDB を使用している場合は、IBM DB2 の解説書の PRECOMPILE または BIND の説明の箇所を参照して、該当の DB2 指令オプションがローカル (DB2) でサポートされるか、または、DB2 コネクト (DRDA) のみでサポートされるか確認してください。サポートされるかどうかわからない場合は、指令を指定して、プログラムのコンパイルを試行します。サポートされない場合は、エラーメッセージが表示されます。

エラーコード

コンパイル時に、数字と説明でエラー条件が返されます。これらのメッセージの詳細は、使用しているデータベースシステムのマニュアルで説明されています。UB2 UDB の古いバージョンを使用している場合は、ホスト変数を参照してるメッセージがわずかに異なります。ハイフンがアンダスコア (_) になり、3 文字以下の文字が名前の末尾に追加されますが、これは無視してください。DB2 ECM から SQL コードに変更するときの副作用として、これらの変更が起こります。QUALFIX オプションの詳細は、『DB2 コンパイラ指令オプション』の節を参照してください。

実行時のエラー条件は、SQLCODE のゼロ以外の値によって示されます。MFSQLMESSAGETEXT の定義を行うと、MFSQLMESSAGETEXT データ項目に説明テキストが保存されます。このデータ項目の詳細は、『SQL 通信領域』の節を参照してください。

801-S
** 外部コンパイラモジュールメッセージ
** SQ0100 SQL1032N  データベース管理者コマンドが
**                  起動できません。
** SQLSTATE=57019

デバッグファイルの作成方法

プログラムのコンパイル時にサポート窓口に問い合わせする必要のあるエラーが発生した場合には、サポート窓口の担当者は、問題の原因を特定するために追加のデバッグファイルの提供を求める場合があります。これらのデバッグファイルは、追加の DB2 コンパイラ指令を指定して作成します。これらの指令のいくつかを指定すると、独自でデバッグする場合に役に立ちます。次の指定があります。

指令 作成ファイル ファイル内の情報
CHKECM(CTRACE) ecmtrace.txt このファイルには、EXEC SQL 文を置き換えるために生成されるコードを示す擬似 COBOL コードが含まれます。このコードは、IBM DB2 COBOL プリコンパイラから出力されるものと同じです。
CHKECM(TRACE) ecmtrace.txt このファイルには、DB2 ECM とコンパイラ間で受け渡しされる情報に関する詳細情報が含まれます。無効な構文を生成するエラーが発生した場合に、このファイルを使用して、問題が発生した箇所を分離できます。
DB2(CTRACE) sqltrace.txt このファイルには、IBM プリコンパイラサービスに渡される情報の詳細なリストと、その結果が含まれます。このファイルは、エラーが DB2 ECM のみでなく DB2 システムソフトウェアのバグに関連する場合にも役に立ちます。
ECMLIST program-name.lst このファイルは、EXEC SQL 文を置き換えるために生成されるコードを示す擬似 COBOL コードを含む、標準の COBOL リストファイルです。CHKECM(CTRACE) 指令と LIST 指令を使用してプログラムをコンパイルする必要があります。

リンク方法

アプリケーションにリンクするには、次の手順を実行します。

  1. Net Express プロジェクトを開き、「ビルドタイプ」を「一般リリースビルド」に設定します。
  2. .exe または .dll ファイルを右クリックします。
  3. [ビルド設定 ...] を選択して、[リンク] タブをクリックします。
  4. カテゴリ」を「高度な設定」に設定します。
  5. これらの LIB とリンクする」の編集ボックスで、次のように入力します。
    db2api.lib

バインディング

DB2 コンパイラ指令の NOACCESS オプションを使用する場合や、コンパイルしたマシン以外のマシンでアプリケーションを実行しようとする場合は、実行する前にアプリケーションを特定のデータベースにバインドしてください。この場合には、BIND オプションを使用してバインドファイル作成し、DB2 BIND コマンドを使用してプログラムをデータベースにバインドします。詳細は、使用している SQL システムのマニュアルを参照してください。

環境変数 HCOBND を指定することにより、現在のソースディレクトリ以外のディレクトリにバインドファイルを格納するよう DB2 ECM に指示できます。次に例を示します。

SET HCOBND=d:¥production¥binds

HCOBND 環境変数で指定したディレクトリは、この環境変数の設定が解除またはリセットされるか、または、次の例のように DB2 BIND 指令オプションを使用して特定のバインドファイル名を指定するまではすべてのバインドファイルに使用されます。

DB2(bind=d:¥test¥test1.bnd)

DB2 BIND 指令オプションは、HCOBND 環境変数を上書きします。