第 8 章: DB2

この章では、Server Express を使用してコンパイルおよびリンクされた、埋め込み SQL 文を持つ COBOL プログラムから DB2 データベースへアクセスする方法を説明します。

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

8.1 文字型データ

文字型データには正しいデータタイプを使用するよう注意する必要があります。254 バイト以下の固定長文字列には CHAR データ型を使用します。254 バイトを超える固定長文字列と可変長文字列には VARCHAR データ型を使用します。詳細については『データ型』の章の『文字データ型』を参照してください。

8.2 追加データ型

DB2 は、『データ型』の章に記載された追加データ型をサポートします。

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

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

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

level_number 1 〜 48 の範囲内
sql_type 次の新 SQL データ型のひとつ。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 (キロバイトを意味します)、M (メガバイト) または G (ギガバイト)で修飾できます。

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(26).

8.3 複合 SQL

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

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

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

8.4.1 INCLUDE 文

次のような形式の文は、

exec sql
   include filename
end-exec

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

copy filename

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

ファイル名の指定にかかわらず、AIX では sqlca と sqlda の特殊な場合としてファイル名は小文字に変換されます。

8.4.2 DECLARE TABLE 文

次のような形の文は許可され、コメントとして扱われます。

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

8.4.3 整数ホスト変数

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

8.4.4 修飾付きホスト変数

ホスト変数は、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

8.4.5 ホスト変数グループ (ホスト構造) とインジケータ配列 (標識配列)

グループ項目内でホスト変数が宣言されると、これらの変数をそれぞれ順に参照するべき 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 プログラムをインジケータ変数で参照することができます。

8.4.6 NOT 演算子 (NOT キーワード) (¬)

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

8.4.7 連結演算子 (ストリングの連結) (|)

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

8.4.8 SQL 通信領域

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

exec sql include sqlca end-exec

これによって、ソースファイル sqlca.cbl がソースコードに取り込まれます。このソース ファイルは、DB2 ECM を通ることにより、SQLCA の COBOL 定義を含んでいます。

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


備考: ANSI と互換性を保つために、SQLCA を完全に定義することをお奨めします。


SQLCODE の 0 以外の条件の後で、例外条件の記述が定義されていれば、DB2 ECM はそれによって MFSQLMESSAGETEXT データ項目の内容を更新します。その場合は、文字データ項目、つまり PIC X(n) として宣言することが必要となり、n には何らかの正当な値が入ります。メッセージがデータ項目に適合しない場合は、メッセージの末尾が切り捨てられます。

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

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

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

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

DB2 ECM では、入れ子の COBOL プログラムを用いて作業することができます。

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

8.5 DB2 INIT 指令

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

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

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

8.6 DB2 UDB-VERSION 指令のオプション

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

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

DB2(UDB-VERSION=V7)

DB2 ECM が新しい API を見つけられなかった場合は次のようなメッセージが表示されます。

* critical errror - DB2Initialize API not found
* Try using directive DB2(UDB-VERSION=V6)
* to compile program

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

** DB00010 DB2 rejected an unspecified option. This error prevents SQL
** processing from continuing - further EXEC SQL statements
** will be ignored

8.7 コンパイル

COBOL コンパイラで SQL プログラムをコンパイルするのは次の 2 つの手順と論理的に同等です。

  1. 事前コンパイルによって SQL 行をホスト言語文に変更する。
  2. 結果ソースをコンパイルする。

これらの手順は、実際には単一のプロセスで行われており、COBOL コンパイラが DB2 ECM とともに行っています。

SQL プログラムをコンパイルする前に、権限が与えられていなくてはなりません。権限は通常 DB2 Database Administrator が授与します。コンパイルには次のいずれかの権限が必要です。

ユーザは、アプリケーションの静的 SQL 文をコンパイルするのに必要なすべてのテーブル権限(table privilege)も必要になります。集団に授与された権限は静的 SQL 文をチェックする権限としては使用できません。SQL プロジェクトにおいて権限がないためにプログラムのコンパイルに失敗する場合は、貴社の DB2 Database Administrator に問い合わせてください。

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

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

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

8.7.1 DB2 コンパイラ指令

他のコンパイラ指令を指定できる個所ならどこでも、DB2 指令を指定することができます。つまり、次の場所に指定します。


注: 上記のメソッドを組み合わせて使用することはできません。使用できるメソッドはどちらか 1 つのみです。


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

表 8-1 は、DB2 コンパイラ指令のオプションを示します。デフォルト値は、太字で下線が引かれています。

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

この表は、DB2 Connect により DB2 Universal Database バージョン 7.x を使用していることが前提となっていることに注意してください。ほかのバージョンの DB2 UDB を使用している場合や、DB2 Connect を使用していない場合は、IBM DB2 リファレンスマニュアルの PRECOMPILE または BIND の項を参照し、DB2 指令オプションがローカルでサポートされているか (DB2)、あるいは DB2 Connect でのみサポートされているのか (DRDA) を確認してください。不明な点がある場合は、当該の指令を指定してプログラムのコンパイルを試みることができます。その指令がサポートされていなければ、エラーメッセージが表示されます。

表 8-1: DB2 コンパイラ指令のオプション
オプション
説明
ACCESS=package name,ACCESS, NOACCESS パッケージの名前を作成し、データベースに格納することを指定します。パラメータなしで ACCESS を指定すると、パッケージ名のデフォルトはプログラム名になります (.CBL 拡張子はつきません)。

同義語は PACKAGE です。

ACTION={ADD | REPLACE }, NOACTION ACTION はパッケージが追加できるか、または置きかえられるかどうかを示します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
ADD 名前付きパッケージが存在せず、新規パッケージが作成されることを示します。パッケージがすでに存在する場合には、実行は停止し、診断エラーメッセージが戻されます。
REPLACE 古いパッケージが、同じ位置、集合、およびパッケージ名を持つ新規パッケージに置き換えられることを示します。REPLACE を指定し、さらに REPLVER または RETAIN のいずれか、あるいはその両方を指定したい場合は、それを ACTION=REPLACE のすぐあとに続けて指定する必要があります。
BIND=bindfile, BIND, NOBIND 作成するバインドファイルの名前を指定します。パラメータなしで BIND を指定すると、バインドファイルのデフォルトは、ファイル名の拡張子が .BND に置き換えられたプログラム名になります。

バインドファイルは、カレントソースディレクトリまたは BIND 指令で指定されたディレクトリ以外のディレクトリに書き込むことができます。書き込むには、HCOBND 環境変数を指定します。例えば、次のように指定します。

HCOBND=d:/mydir/binds
export HCOBND

HCOBND 環境変数に指定するディレクトリは、この環境変数の設定を解除(unset)する、あるいは DB2 のバインド指令でプログラムに対して特定のビルド設定を指定するまで、Server Express で作成されるすべてのバインドファイルに適用します。例えば、

db2(bind=d:/mybinds/test.bnd)

と指定すると、HCOBND 環境変数の設定は無視されます。

同義語は BINDFILE です。

BLOCK={UNAMBIG | ALL | NO} パッケージ作成の際に、レコード ブロック化モードを使用することを指定します。行ブロック化についての情報は、『IBM DB2 Administration Guide』、または 『Application Programming Guide』 を参照してください。
ALL 読み込み専用カーソル、または FOR UPDATE OF として指定されていないカーソルのブロック化を指定します。不明なカーソルは読み込み専用として扱います。
NO カーソルをブロック化しないことを指定します。不明なカーソルは更新可能として扱います。
UNAMBIG 読み込み専用カーソル、または FOR UPDATE OF として指定されていないカーソルのブロック化を指定します。不明なカーソルは更新可能として扱います。

同義語は BLOCKINGです。

CALL_RESOLUTION={IMMEDIATE | DEFERRED}, IMMEDIATECALL 文の解決方法を指定します。
IMMEDIATE CALL 文が正規 SQL 文として実行されることを指定します。呼び出された名前が解決できないと、プリコンパイラはエラー SQL0204 を報告します。
DEFERRED CALL 文が以前の(deprecated) sqleproc() API の呼び出しとして実行されることを指定します。

この指令を使用するには、DB2 UDB V8.1 以降が必要になります。

ホスト変数にストアドプロシージャの名前を設定している、あるいはプリコンパイラが CALL 文のプロシージャの解決に失敗する場合は、CALL_RESOLUTION=DEFERRED を設定する必要があります (どちらの場合も、プリコンパイラはエラー SQL0204 を報告します)。

CCSIDG=double-ccsid , NOCCSIDG コード化文字セット識別子 (CCSID) を、CREATE 文 および ALTER TABLE SQL 文の (特定の CCSID 句なしの) 文字列定義の 2 バイト文字に使用できることを指定する整数。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。このオプションが指定されない場合には、DRDA サーバはシステム定義のデフォルト値を使用します。
CCSIDM=mixed-ccsid , NOCCSIDM コード化された文字セット識別子 (CCSID) を、CREATE 文 および ALTER TABLE SQL 文の (特定の CCSID 句なしの) 文字列定義の混合バイト文字に使用できることを指定する整数。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。このオプションが指定されない場合には、DRDA サーバはシステム定義のデフォルト値を使用します。
CCSIDS=sbcs-ccsid, NOCCSIDS コード化された文字セット識別子 (CCSID) を、CREATE 文および ALTER TABLE SQL 文の (特定の CCSID 句なしの) 文字列定義の 1 バイト文字に使用できることを指定する整数。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。このオプションが指定されない場合には、DRDA サーバはシステム定義のデフォルト値を使用します。
CHARSUB={DEFAULT | BIT | SBCS | MIXED}, NOCHARSUB CREATE 文および ALTER TABLE SQL 文の列定義に使用されるデフォルトの文字サブタイプを指定します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
BIT 明示的にサブタイプが指定されていない新規文字列のすべてに FOR BIT DATA SQL 文字サブタイプを使用します。
DEFAULT 明示的にサブタイプが指定されていない新規文字列のすべてに、対象システムが定義したデフォルトを使用します。
MIXED 明示的にサブタイプが指定されていない新規文字列のすべてに FOR MIXED DATA SQL 文字サブタイプを使用します。
SBCS 明示的にサブタイプが指定されていない新規文字列のすべてに FOR SBCS DATA SQL 文字サブタイプを使用します。
COLLECTION=schema name, NOCOLLECTION パッケージに 8 字の COLLECTION (集合) 識別子を指定します。指定しない場合は、パッケージを処理しているユーザの権限識別子 (許可 ID) が使用されます。
COMMIT={1 | 2 | 3 | 4} COMMIT 文が暗黙に生成される場所を指定します。
1 COMMIT 文は暗黙に生成されません。
2 STOP RUN 文とプログラムの最後に COMMIT 文が暗黙に生成されます。
3 STOP RUN 文、EXIT PROGRAM 文、およびプログラムの最後に COMMIT 文が暗黙に生成されます。
4 すべての SQL 文の後に COMMIT が暗黙に生成されます。
CONCAT=(ascii character code | 33 } CONCAT 記号 (|) に使用する ASCII 文字コードを指定します。
CONNECT={1 | 2}, NOCONNECT CONNECT 文をタイプ 1 CONNECT、またはタイプ 2 CONNECT として処理することを指定します。
CTRACE, NOCTRACE サポート担当へトレース ファイルの提出が必要な場合に、トレース ファイルを作成します。作成されるファイルのファイル名は sqltrace.txt です。
DB=database name, DB プログラムがアクセスするデータベースの名前を指定します。パラメータなしで DB を指定すると、環境変数 DB2DBDFT で指定されたデータベースが使用されます。
DEC={31 | 15} , NODEC 10 進数算術演算に使用する最大精度を指定します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。このオプションが指定されない場合には、DRDA サーバはシステム定義のデフォルト値を使用します。

15 を指定すると、10 進数算術演算に 15 桁の精度を使用します。

31 を指定すると、10 進数算術演算に 31 桁の精度を使用します。

DECDEL={PERIOD | COMMA}, NODECDEL 小数点定数および浮動小数点定数の小数点識別子として、ピリオド (.) またはコンマ (,) のどちらを使用するかを指定します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。このオプションが指定されない場合には、DRDA サーバはシステム定義のデフォルト値を使用します。
COMMA コンマ (,) を小数点識別子として使用します。
PERIOD ピリオド (.) を小数点識別子として使用します。
DEFERRED_PREPARE={NO | YES | ALL}, NODEFERRED_PREPARE DB2 共通サーバデータベース、または DRDA データベースにアクセスするときのパフォーマンスを拡張します。このオプションは、SQL PREPARE 文のフローと、それに関連する OPEN 文、DESCRIBE 文、または EXECUTE 文のフローを結び付け、プロセス間、またはネットワークのフローを最小化します。
NO PREPARE 文は、発行と同時に実行されます。
YES PREPARE 文の実行は、対応する OPEN 文、DESCRIBE 文、または EXECUTE 文が発行されるまで遅延されます。PREPARE 文に INTO 句を使用した場合には、遅延されません。INTO 句は SQLDA がすぐに戻される必要があるためです。ただし、パラメータマーカを使用しないカーソルに対して PREPARE INTO 句が発行される場合には、PREPARE の実行時に、事前に OPEN されているカーソルによって処理が最適化されます。
ALL パラメータマーカを含む PREPARE INTO 句が遅延されることを除いて、YES と同様です。PREPARE INTO 文がパラメータマーカを含まない場合でも、カーソルの事前 OPEN が行われます。PREPARE 文が SQLDA を戻す INTO 句を使用している場合には、OPEN 文、DESCRIBE 文、または EXECUTE 文が発行されて戻されるまで、アプリケーションはこの SQLDA の内容を参照することはできません。
DEGREE={1 | degree-of-parallelism | ANY}, NODEGREE I/O 並列処理を使用してクエリーを実行するかどうかを指定します。
1 並列 I/O 操作を禁止します。
degree-of-I/O-parallelism 並列 I/O 操作の次数を指定します。値は 2 〜 32767 のいずれかです。
ANY 並列 I/O 操作を許可します。
DISCONNECT={EXPLICIT | CONDITIONAL | AUTOMATIC}, NODISCONNECT
AUTOMATIC コミット時にすべてのデータベース接続を切断することを指定します。
CONDITIONAL データベース接続が RELEASE とマーキングされている場合、または開かれている WITH HOLD カーソルを持たない場合には、コミット時に切断することを指定します。
EXPLICIT RELEASE 文によって明示的にリリースをマーキングされているデータベース接続だけを、コミット時に切断することを指定します。
DYNAMICRULES={BIND | RUN | DEFINE | INVOKE}, NODYNAMICRULES パッケージの動的 SQL が実行されたときに、どの権限識別子 (許可 ID) を使用するかを指定します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
BIND 動的 SQL の実行に使用される権限識別子 (許可 ID) はパッケージの所有者であることを示します。
RUN 動的 SQL の実行に使用される権限識別子 (許可 ID) はパッケージ実行者の authid であることを示します。
DEFINE 動的 SQL の実行に使用される権限識別子 (許可 ID) は UDF またはストアドプロシージャの定義者であることを示します。このオプションは DB2 ではサポートされていません。
DEFINEBIND パッケージがルーチンコンテキスト内で使用されている場合、ルーチンの実行者の権限識別子 (許可 ID) が、権限チェック(authorization checking)、およびルーチンの動的 SQL 文内の未修飾のオブジェクト参照の暗黙の修飾に使用されます。

パッケージがスタンドアローンのアプリケーションとして使用されている場合、動的 SQL 文は、そのパッケージが DYNAMICRULES BIND でビルドされたように処理されます。

DEFINERUN パッケージがルーチンコンテキスト内で使用されている場合、ルーチンの実行者の権限識別子 (許可 ID) が、権限チェック(authorization checking)、およびルーチンの動的 SQL 文内の未修飾のオブジェクト参照の暗黙の修飾に使用されます。

パッケージがスタンドアロンのアプリケーションとして使用されている場合、動的 SQL 文は、そのパッケージが DYNAMICRULES RUND でバインドされたように処理されます。

INVOKE 動的 SQL の実行に使用される権限識別子 (許可 ID) は UDF またはストアドプロシージャの実行者であることを示します。このオプションは DB2 ではサポートされていません。
INVOKEBIND パッケージがルーチンコンテキスト内で使用されている場合、ルーチンが呼び出されたときに有効なカレント文 (current statement)の権限識別子が、動的 SQL 文の権限チェック(authorization checking)、およびそのルーチン内の動的 SQL 文内の未修飾のオブジェクト参照の暗黙の修飾に使用されます。

パッケージがスタンドアロンのアプリケーションとして使用されている場合、動的 SQL 文は、そのパッケージが DYNAMICRULES BIND でバインドされたように処理されます。

INVOKERUN パッケージがルーチンコンテキスト内で使用されている場合、そのルーチンが呼び出されたときに有効なカレント文 (current statement)の権限識別子が、動的 SQL 文の権限チェック(authorization checking)、およびそのルーチン内の動的 SQL 文内の未修飾のオブジェクト参照の暗黙の修飾に使用されます。

パッケージがスタンドアロンのアプリケーションとして使用されている場合、動的 SQL 文は、そのパッケージが DYNAMICRULES RUN でバインドされたように処理されます。

EXPLAIN={NO | YES | ALL}, NOEXPLAIN パッケージの各 SQL 文に対して選択されたアクセス プランに関する情報を Explain テーブルに格納します。DRDA はこのオプションの ALL 値をサポートしていません。
NO Explain 情報は取り込まれません。
YES Explain テーブルを生成して、選択されたアクセス プランの情報を格納します。
ALL 適格な静的 SQL 文それぞれに対する Explain 情報が Explain テーブルに置かれます。さらに、CURRENT EXPLAIN SNAPSHOT レジスタが NO に設定されている場合でも、適格な動的 SQL 文の Explain 情報が実行時に集められます。特殊レジスタの詳細については、『IBM DB2 SQL Reference』 を参照してください。
EXPLSNAP={NO | YES | ALL}, NOEXPLSNAP Explain Snapshot 情報を Explain テーブルに格納します。この DB2 の事前コンパイル/バインドオプションは DRDA ではサポートされていません。
NO Explain Snapshot は取り込まれません。
YES 適格な静的 SQL 文に対する Explain Snapshot が Explain テーブルに置かれます。
ALL 適格な静的 SQL 文それぞれに対する Explain Snapshot が Explain テーブルに置かれます。さらに、CURRENT EXPLAIN SNAPSHOT レジスタが NO に設定されている場合でも、適格な動的 SQL 文の Explain Snapshot 情報が実行時に集められます。特殊レジスタの詳細については、『IBM DB2 SQL Reference』 を参照してください。
FEDERATED={NO|YES}
静的 SQL 文がニックネームまたは連合ビューを参照するかどうかを指定します。このオプションが指定されているのにパッケージが連合ビューやニックネームを参照していない場合や、このオプションが指定されていないのにパッケージが連合ビューやニックネームを参照している場合は、SQL エラーが戻されます。
NO プログラムは DB2 Universal Database へ接続します。これはデフォルト値です。
YES プログラムは DB2 連合システムにアクセスします。
FORMAT={DEF | USA | EUR | ISO | JIS | LOC} 日付/時刻フィールドがホスト変数の列表現に割り当てられたときの日付/時刻形式を指定します。DEFはデータベースの国番号に関連付けられている日付/時刻形式です。
EUR 欧州日付/時刻形式の IBM 標準。
ISO 国際標準化機構の日付/時刻形式。
JIS 日本工業規格の日付/時刻形式。
LOC データベースの国番号に関連付けられているローカルの日付/時刻形式。
USA 米国日付/時刻形式の IBM 標準。

同義語は DATETIMEです。

FUNCPATH=schema-name , NOFUNCPATH 静的 SQL 内でユーザ定義の互いに異なる型と関数を解決するために使用される関数パスを指定します。このオプションを指定しない場合のデフォルトの関数パスは次のとおりです。

"SYSIBM","SYS FUN",USER

USER は USER 特殊レジスタの値です。この DB2 事前コンパイル/バインドオプションは DRDA ではサポートされていません。

schema-name 短い SQL 識別子 (SQL 短識別子)。通常識別子または区切り識別子であり、アプリケーションサーバに存在するスキーマを識別します。事前コンパイル時やバインド時に、スキーマが存在するかどうかの妥当性検査は行いません。同じスキーマを関数パスで複数回使用することはできません。指定できるスキーマの数は結果関数パスの長さによって制限され、最大 254 バイトです。 SYSIBM スキーマを明示的に指定する必要はありません。SYSIBM スキーマは、関数パスに含まれていなくても、最初のスキーマであることが暗黙の前提とされます。詳細は、『IBM DB2 SQL Reference』 を参照してください。
GENERIC=string 新しいバインドオプションを対象の DRDA データベースに渡すための手段を提供します。各オプションは 1 つまたは複数の空白で区切られ、二重引用符で囲まれていなければなりません。指定例は DB2(GENERIC="keepdynamic yes") のようになります。
GEN-INIT-FLAG, NOGEN-INIT-FLAGDB2 for OS/390 互換に対する SQL-INIT-FLAG 変数を生成します。SQL の環境が初期化されるとフラグが更新されます。使用中の環境にこの変数を定義する場合は、NOGEN-INIT-FLAG を設定してこの指令でアプリケーションをコンパイルします。すると、プリコンパイルはこの変数を生成しません。
GEN-SQLCA, NOGEN-SQLCAアプリケーションプログラムでコーディングする EXEC SQL INCLUDE SQLCA 文と等価なプログラム変数の SQLCA を生成します。
IGNORE-NESTED=program-id, IGNORE-NESTED, NOIGNORE-NESTED 入れ子のプログラム中で、DB2 インターフェイスコードの生成を開始する個所の program-id を指定します。program-id よりも前に現れる入れ子のプログラムは無視され、DB2 インターフェイスコードは生成されません。program-id は COBOL ソースコードで指定してください。そうしないと、コンパイルエラーになります。パラメータなしで IGNORE-NESTED を指定すると、program-id のデフォルトは、拡張子が .CBL に置き換えられたプログラム名になります。
INIT={PROT | s | x }, NOINIT プログラムで SQL を初期化します。このオプションは、OO プログラム内で使用された場合には、無効になります。
PROT STOP RUN 時にデータベースを保護する必要があるが、初期化しない場合に、SQL プログラムに使用します。
S 共有モードでデータベースを使用します。
X 排他モードでデータベースを使用します。
INSERT={DEF | BUF}, NOINSERT プログラムを事前コンパイル、またはバインドして、DB2 クライアントから DB2 サーバへ、パフォーマンス向上のためにデータ挿入のバッファを要求することを許可します。
BUF アプリケーションからの挿入をバッファします。
DEF アプリケーションからの挿入をバッファしません。
ISOLATION={CS | RR | UR | RS | NC} このパッケージにバインドされたプログラムが、実行中の他のプログラムの影響から分離される程度を判断します。分離レベルについての詳細は、『IBM DB2 SQL Reference』 を参照してください。
CS カーソル固定を分離レベルとして指定します。
NC (No Commit) コミットメントの制御を使用しないことを指定します。この分離レベルは DB2 ではサポートされていません。
RR 「繰り返し可能読み出し」(反復可能読み出し) を分離レベルとして指定します。
RS 「読み出し固定」を分離レベルとして指定します。読み出し固定を使用すると、パッケージ内の SQL 文は、他のアプリケーションが読み込んで変更した行に対するプロセスから分離されて実行されます。
UR 「非コミット読み出し」を分離レベルとして指定します。
LANGLEVEL={SAA1 | NONE | MIA} このオプションについての詳細は、『IBM DB2 アプリケーションプログラミングの手引き』 を参照してください。
MIA FOR UPDATE 句は位置指定更新のオプションです。C の NULL で終わる文字列は、空白文字で詰められ、つねに NULL 終端文字を含みます。このオプションは DDCS ではサポートされていません。
SAA1 位置指定更新で更新されたすべての列に FOR UPDATE 句が必要です。C の NULL で終わる文字列は空白文字が付加されず、切り捨てが行われた場合には NULL 終端文字を含みません。
NONE SAA1 と同義語です。

同義語は STDLVL です。

LEVEL=consistency-token, NOLEVEL 一貫性トークンを使用しているモジュールのレベルを定義します。一貫性トークンは、8 字以下の英数字の値です。RDB パッケージの一貫性トークンは、リクエスタのアプリケーションとリレーショナルデータベースパッケージが同期していることを検証します。この DRDA の事前コンパイルオプションは DB2 ではサポートされていません。

備考:通常の場合は、このオプションを使用しないことをお奨めします。

MSGAREA={data-item-name | MFSQLMESSAGETEXT },NOMSGAREA) 英数字データ項目の名前を指定します。この項目がプログラム ソースに存在する場合は、自動的に DB2 エラー条件がこの項目に記述されます (SQLCODE がゼロではないとき)。
MULTI-NESTED | NOMULTI-NESTED

複数の入れ子サブルーチンを含むソースモジュールで、プリコンパイラが各ルーチンにDB2 インターフェースコードを生成します。

NOT={ascii character code | 172 } NOT 文字 (¬) に使用する ASCII 文字コードを指定します。(¬).
OWNER=authorization-id, NOOWNER パッケージの所有者に 8 字の権限識別子 (許可 ID) を指定します。所有者は、パッケージでの SQL 文の実行に必要な権限を持つ必要があります。このオプションが明示的に指定されていない場合には、デフォルトは事前コンパイル/バインド プロセスの一次権限識別子 (1次許可 ID) です。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。

同義語は SCHEMA です。

PASS={password |userid.password}, NOPASS データベースに接続する userid と password を指定します。
PRE, NOPRE DB2 API ルーチンの入口点を事前にロードすることによって、DB2 プログラムをアニメートしたり実行することができます。.exe ファイルを作成する場合は、NOPRE を指定します。それ以外の場合は、リンクの問題が発生する可能性があります。
QUALFIX, NOQUALFIX ホスト変数を DB2 に宣言するときに、DB2 ECM がこれらのホスト変数の名前に 3 文字を追加します。これにより、修飾によって起こる問題 (修飾されないと 2 つ以上のホスト変数が同じ名前になる場合) を避けることができますが、次の副作用があります。
(1) ホスト変数名の最大長は 27 字。
(2) DB2 エラーメッセージで、ホスト変数の名前に 3 つの追加文字が付加されて表示されることがある。
QUALIFIER=qualifier-name, NOQUALIFIER パッケージに含まれる修飾されていないテーブル名、ビュー、インデックスおよびエイリアスに 18 文字の暗黙の修飾子を提供します。デフォルトは所有者の権限 ID です。QUALIFIER 指令は、DB2 Universal Database 5.2 以降で使用する場合は、ローカルの DB2 データベースで有効です。
QUERYOPT= optimization-level, NOQUERYOPT パッケージに含まれるすべての静的 SQL 文に対して望ましい最適化レベルを示します。デフォルト値は 5 です。使用可能な最適化レベルの詳細は、「SQL Reference」 の SET CURRENT QUERY OPTIMIZATION 文を参照してください。この DB2 事前コンパイル/バインドオプションは、DRDA ではサポートされていません。
RELEASE={COMMIT | DEALLOCATE}, NORELEASE 各 COMMIT ポイントで、またはアプリケーションの終了時にリソースが開放されるかどうかを示します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
COMMIT 各 COMMIT ポイントでリソースを解放します。動的 SQL 文に使用されます。
DEALLOCATE アプリケーションの終了時にだけリソースを解放します。
REPLVER=version-id, NOREPLVER パッケージの特定のバージョンを置き換えます。バージョン識別子は、どのバージョンのパッケージを置き換えるかを指定します。最大長は 254 字です。
RETAIN={YES | NO} , NORETAIN RETAIN はパッケージが置き換えられるときに、EXECUTE 権限が保持されるかどうかを示します。パッケージの所有者が変わった場合は、新しい所有者が以前の所有者に BIND 権限と EXECUTE 権限を付与します。
NO パッケージを置き換えるときに EXECUTE 権限を保持しません。
YES パッケージを置き換えるときに EXECUTE 権限を保持します。

ACTION=REPLACE または REPLVER を指定している場合、RETAIN はそのすぐあとに続けて指定する必要があります。

SQLERROR={NOPACKAGE | CHECK | CONTINUE}, NOSQLERROR エラーが発生した場合に、パッケージを作成するか、またはファイルをバインドするかどうかを示します。
CHECK 対象システムが、バインドされている SQL 文の構文およびセマンティックスの検査をすべて行うことを指定します。パッケージはこのプロセスの部分としては作成されません。パッケージの作成中に、同じ名前とバージョンを持つ既存のパッケージがある場合には、既存のパッケージは削除されるか、または ACTION REPLACE が指定されていれば、置き換えられます。
CONTINUE SQL エラーが発生した場合でも、パッケージやバインドファイルは作成されます。このオプションは DB2 ではサポートされていません。
NOPACKAGE エラーが発生した場合には、パッケージやバインドファイルは作成されません。

構文が package オプションとともに使用されると、package は無視されます。

同義語は ERROR です。

SQLFLAG={MVSDB2V23 | MVSDB2V31 | MVSDB2V41}-SYNTAX, NOSQLFLAG 指定した SQL 言語構文から、偏差を識別し報告します。

sqlflag オプションに加えて、bindfile か package オプションが指定された場合にだけ、バインドファイルまたはパッケージが作成されます。

次のいずれかのオプションが指定された場合にだけ、ローカル構文検査が行われます。

sqlflag を指定しない場合には、フラグ機能は呼び出されず、バインドファイルまたはパッケージは影響されません。

MVSDB2V23-SYNTAX MVS DB2 バージョン 2.3 SQL 言語構文に対して SQL 文が検査されます。構文からの偏差はすべてプリコンパイラリストに報告されます。
MVSDB2V31-SYNTAX MVS DB2 バージョン 3.1 SQL 言語構文に対して SQL 文が検査されます。構文からの偏差はすべてプリコンパイラリストに報告されます。
MVSDB2V41-SYNTAX MVS DB2 バージョン 4.1 SQL 言語構文に対して SQL 文が検査されます。構文からの偏差はすべてプリコンパイラリストに報告されます。

同義語は FLAG です。

SQLRULES={DB2 | STD}, NOSQLRULES タイプ 2 CONNECT を DB2 の規則に準じて処理するか、ISO/ANS SQL92 に基づく標準 (STD) 規則に準じて処理するかを指定します。
DB2 現行の接続から他の確立済み (休止状態の) 接続へ切り替える SQL CONNECT 文の使用を許可します。
STD 新規接続の確立にのみ SQL CONNECT 文の使用を許可します。休止状態の接続へ切り替えるには、SQL SET CONNECTION 文を使用してください。

同義語は RULES です

SQLWARN={YES | NO}, NOSQLWARN 動的 SQL 文のコンパイルから (PREPARE または EXECUTABLE IMMEDIATE 経由で) 警告が戻されるか、または記述処理から (PREPARE...INTO または DESCRIBE 経由で) 警告が戻されるかを示します。この DB2 事前コンパイル/バインドオプションは DRDA ではサポートされていません。
NO SQL コンパイラから警告は戻されません。
YES SQL コンパイラから警告が戻されます。

備考:SQLCODE +238 は例外です。この警告は sqlwarn オプションの値にかかわらず、戻されます。

同義語は WARN です。

STRDEL={APOSTROPHE | QUOTE}, NOSTRDEL SQL 文内の文字区切りとしてアポストロフィ (') または二重引用符 (") のどちらを使用するか指定します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。このオプションが指定されない場合には、DRDA サーバはシステム定義のデフォルト値を使用します。

APOSTROPHE を指定すると、アポストロフィ (') を文字区切りとして使用します。

QUOTEを指定すると、二重引用符 (") を文字区切りとして使用します。

SYNCPOINT={ONEPHASE | TWOPHASE | NONE}, NOSYNCPOINT 複数のデータベース接続間でどのようにコミットまたはロールバックを調整するかを指定します。
NONE トランザクション マネージャ (TM) を使用して 2 フェーズ コミットを行わないことを指定します。単一の更新操作、複数の読み取り操作を強制しません。COMMIT は各関連データベースに送られます。コミットがどれか失敗した場合には、アプリケーションに回復責任があります。
ONEPHASE TM を使用して 2 フェーズ コミットを行わないことを指定します。複数データ トランザクション内の各データベースによって行われた作業をコミットするには、1 フェーズ コミットが使用されます。
TWOPHASE TM を使用して、このプロトコルをサポートするデータベース間の 2 フェーズ コミットを調節することを指定します。
SYNTAX SQLERROR=CHECK 指令の同義語です。
TEXT=label, NOTEXT パッケージの記述。最大長は 255 字です。デフォルト値は空白です。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
TRANSFORM-GROUP=identifier. NOTRANSFORM-GROUP 静的 SQL で使用する変換グループ名を指定します。指定するのは長さが 18 文字以下の SQL 識別子です。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
UDB-VERSION={V2 | V5 | V6 | V7 | V8} 使用したい DB2 UDB のバージョンを指定します。詳細については『UDB-VERSION DB2 指令のオプション』の項を参照してください。
VALIDATE={RUN | BIND}, NOVALIDATE データベース管理者が権限エラーとオブジェクトが存在しないエラーを検査するタイミングを決めます。妥当性検査にはパッケージ所有者の権限 ID が使用されます。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
BIND 妥当性検査は事前コンパイル/バインド時に行われます。オブジェクトがすべて存在しない場合や、権限がすべて所持されていない場合には、エラーメッセージが生成されます。SQLERROR CONTINUE を指定している場合には、エラーメッセージの代わりにパッケージまたはバインドファイルが生成されます。ただし、エラーが発生している文は実行可能ではありません。
RUN 妥当性検査はバインド時に行われます。オブジェクトがすべて存在し、権限がすべて所持されている場合には、実行時に再検査は行われません。

事前コンパイル/バインド時にオブジェクトがすべて存在しない場合、または権限がすべて所持されていない場合には、警告メッセージが生成され、SQLERROR CONTINUE オプションの設定にかかわらず、パッケージは問題なくバインドされます。ただし、事前コンパイル/バインド時に失敗した SQL 文の権限検査と存在検査は、実行時に再度行われる可能性があります。

VERSION=version-id, NOVERSION パッケージのバージョン識別子を定義します。バージョン識別子は、英数字、$、#、@、_、-、または . で、長さは 254 字以内です。この DRDA 事前コンパイルオプションは DB2 ではサポートされていません。

8.8 エラーコード

コンパイル時に、数字と説明でエラー条件が戻されます。これらのメッセージの詳細については、ご使用のデータベースシステムのマニュアルで説明されています。ホスト変数を参照しているメッセージでは、ホスト変数の名前がわずかに変わります。ハイフンが下線 (_) になり、3 字以下の文字が名前の終わりに追加されますが、これは無視してください。DB2 ECM から SQL コードに変更するときの副作用として、これらの変更が起こります。

実行時のエラー条件は、SQLCODE の非ゼロ値によって示されます。MFSQLMESSAGETEXT の定義をすれば、MFSQLMESSAGETEXT データ項目に説明文が置かれます。このデータ項目についての詳細は、前述の 『SQL 通信領域 (連絡域)』を参照してください。

801-S
**    External Compiler Module message
**    SQ0100 SQL1032N  No start database manager command was issued.
**    SQLSTATE=57019

8.9 デバッグファイルの生成

プログラムのコンパイル時に、技術的なサポートを要するエラーが発生した場合、サポート担当者から、問題の原因特定のためのデバッグファイルの提供を依頼されることがあります。こうしたデバッグファイルは、専用の SQL コンパイラ指令を指定して取得します。独自にデバッグ作業を行う場合にもこれらの指令が役立ちます。次の指令があります。

指令
生成ファイル
ファイル内の情報
CHKECM(CTRACE) ecmtrace.txt このファイルの内容は、EXEC SQL 文を置き換えるために生成されたコードを示す擬似 COBOL コードです。このコードは、IBM DB2 COBOL プリコンパイラからの出力と同等です
CHKECM(TRACE) ecmtrace.txt このファイルの内容は、DB2 ECM とそのコンパイラの間でどんな情報が渡されるかの詳細です。エラーが発生して無効な構文が生成された場合、このファイルは問題が発生した場所を分離しやすくするのに必要になります。
DB2(CTRACE) sqltrace.txt このファイルの内容は、IBM Precompiler Services に渡された情報の詳細な一覧と結果です。このファイルは、DB2 ECM、および DB2 システムのソフトウェアのバグにかかわるエラーの場合に非常に有用です。
ECMLISTprogram-name.lstこのファイルは標準の COBOL のリストファイルで、内容は、 EXEC SQL 文を置き換えるために生成されたコードを示す擬似 COBOL コードです。また、プログラムをCHKECM(CTRACE) 指令および LIST 指令でコンパイルする必要があります。

8.10 リンクと実行

この節では、次のアプリケーションをビルドする方法について説明します。

8.10.1 スタンドアロン DB2 アプリケーション

DB2 アプリケーションを中間コードまたは生成コードとして実行する場合は、リンクする必要はありません。

DB2 アプリケーションを実行可能ファイルとしてリンクする場合は、以下のようにビルドします:

cob -xvt db2prog.cbl -N nolitlink

DB2 アプリケーションを呼び出し可能共有オブジェクトとしてリンクする場合は、以下のようにビルドします:

cob -zvt db2prog.cbl -N nolitlink

8.10.2 クライアント DB2 アプリケーションとストアドプロシージャ

クライアント DB2 アプリケーションとそれが使用するストアドプロシージャをビルドするメソッドは 2 種類あります。以下の節では、それらのメソッドについて説明します。ここに示す client_app は単一の C モジュール client_app.c で構成されるクライアントアプリケーション、fred は単一の COBOL モジュール fred.cbl で構成されるストアドプロシージャです。

8.10.2.1 メソッド 1

メソッド 1 は推奨メソッドです。クライアントアプリケーションの全体または一部が COBOL で記述されている場合には、このメソッドを使用しなければなりません。

たとえ COBOL がまったく含まれていない場合でも Cob ユーティリティを使用してクライアントプログラムをビルドします。client_app をビルドする場合の例を次に示します。

COBOPT=pathname/filename cob -xot client_app client_app.c

pathname/filename は DB2 固有の cob オプションを含むファイルを識別します。

呼び出し可能共有オブジェクトとしてストアドプロシージャをビルドします。fred をビルドする場合の例を次に示します。

cob -zOot fred fred.cbl

注: AIX プラットフォーム上で実行している場合は、次の例のように -Q フラグを追加し、ストアドプロシージャのエントリポイントとしてストアドプロシージャの名前を指定する必要があります。

cob -zOot fred -Q -efred fred.cbl

ストアドプロシージャが SQL 機能を使用している場合は、次の例のように共有オブジェクトをビルドする際に SQL ライブラリをインクルードする必要があります。

cob -zOot fred -Q -efred fred.cbl -L/usr/lpp/db2_05_00/lib -ldb2 -ldb2gmf

8.10.2.2 メソッド 2

クライアントプログラムが COBOL をまったく含まない場合は、このメソッドを使用できます。

クライアントプログラムをビルドします。ここでは C コンパイラを使用して client_app をビルドする例を示します。

cc -O -ot client_app client_app.c

注: AIX プラットフォーム上で実行している場合は、-brtllib を指定してランタイムリンクライブラリをインクルードする必要があります。

cc -O -ot client_app client_app.c -brtllib

自己格納型の呼び出し可能共有オブジェクトとしてストアドプロシージャをビルドします。fred をビルドする場合の例を次に示します。

cob -yOot fred fred.cbl

注: AIX プラットフォーム上で実行している場合は、次の例のように -Q フラグを追加し、ストアドプロシージャのエントリポイントとしてストアドプロシージャの名前を指定する必要があります。

cob -zOo fred -Q -efred fred.cbl

ストアドプロシージャが SQL 機能を使用している場合は、次の例のように共有オブジェクトをビルドする際に SQL ライブラリをインクルードする必要があります。

cob -zOot fred -Q -efred fred.cbl -L/usr/lpp/db2_05_00/lib -ldb2 -ldb2gmf

8.11 バインディング

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

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

HCOBND=d:/production/binds
export HCOBND

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

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

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


Copyright © 2006 Micro Focus International Limited. All rights reserved.