この章では、Server Express を使用してコンパイルおよびリンクされた、埋め込み SQL 文を持つ COBOL プログラムから DB2 データベースへアクセスする方法を説明します。
DB2 外部コンパイラモジュール (ECM) は、Server Express が提供する新しいタイプの統合プリプロセッサであり、Micro Focus COBOL コンパイラとより密接に動作するように設計されています。DB2 ECM により、埋め込み SQL 文は DB2 データベース サービスへの適切な呼出しに変換されます。
文字型データには正しいデータタイプを使用するよう注意する必要があります。254 バイト以下の固定長文字列には CHAR データ型を使用します。254 バイトを超える固定長文字列と可変長文字列には VARCHAR データ型を使用します。詳細については『データ型』の章の『文字データ型』を参照してください。
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). |
現在 DB2 V5.2 で使用可能な拡張形式も含め、複合 SQL をサポートしています。不完全な複合 SQL 文は DB2 ECM により検知され、エラーが発生します。ただし、DB2 はこの状態からいつも回復するとは限りません。プログラム ソース後半の有効な SQL 文がさらにエラーを起こす場合がありますので、注意してください。
ここでは、埋め込み SQL サポートの Micro Focus 拡張を説明します。
次のような形式の文は、
exec sql include filename end-exec
次の文とまったく同じように許可および処理されます。
copy filename
インクルードされたファイルには、コピーファイルが含むことのできる COBOL 文をすべて含むことができます。さらに EXEC SQL 文を含むこともできます。
ファイル名の指定にかかわらず、AIX では sqlca と sqlda の特殊な場合としてファイル名は小文字に変換されます。
次のような形の文は許可され、コメントとして扱われます。
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 プログラムをインジケータ変数で参照することができます。
DB2 では演算子 ¬=, ¬> および ¬< を使用することができます。これらは <>、 <= および >= にマップされます。NOT 演算子 (NOT キーワード) の文字表現はシステムによって異なるので、DB2 コンパイラ指令の NOT オプションを使用して NOT 演算子を定義することができます。
国によっては、連結演算子 (ストリングの連結) に使用される記号は ASCII 文字の (|) ではありません。DB2 ECM では、DB2 コンパイラ指令の CONCAT オプションを使用して、他の ASCII 文字を連結演算子に指定することができます。
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 は、ホスト変数として宣言する必要はありません。
DB2 ECM はオブジェクト指向 COBOL の構文 (OO プログラム) と動作するように拡張されました。ただし、いくつか制限がありますので、注意してください。
DB2 ECM では、入れ子の COBOL プログラムを用いて作業することができます。
デフォルトでは、入れ子の COBOL プログラムのすべてに DB2 インターフェイスコードが生成されます。これを避けるには、DB2 指令 IGNORE-NESTED を使用してください。IGNORE-NESTED を適切に使用するには、次の制限に注意してください。
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 オプションを持つアプリケーションで複数のモジュールをコンパイルすると、プログラムが異常終了する可能性があります。
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
COBOL コンパイラで 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 データ項目と同じように調べることができます。
他のコンパイラ指令を指定できる個所ならどこでも、DB2 指令を指定することができます。つまり、次の場所に指定します。
$set db2(init=prot bind collection=myschema)
cob -V testconn.cbl -C"anim db2(init==prot bind collection==myschema)"
注: 上記のメソッドを組み合わせて使用することはできません。使用できるメソッドはどちらか 1 つのみです。
表 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) を確認してください。不明な点がある場合は、当該の指令を指定してプログラムのコンパイルを試みることができます。その指令がサポートされていなければ、エラーメッセージが表示されます。
オプション |
説明 |
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ACCESS=package name,ACCESS, NOACCESS | パッケージの名前を作成し、データベースに格納することを指定します。パラメータなしで ACCESS を指定すると、パッケージ名のデフォルトはプログラム名になります (.CBL 拡張子はつきません)。
同義語は PACKAGE です。 |
||||||||||||||||
ACTION={ADD | REPLACE }, NOACTION | ACTION はパッケージが追加できるか、または置きかえられるかどうかを示します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
|
||||||||||||||||
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』 を参照してください。
同義語は BLOCKINGです。 |
||||||||||||||||
CALL_RESOLUTION={IMMEDIATE | DEFERRED}, IMMEDIATE | CALL 文の解決方法を指定します。
この指令を使用するには、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 ではサポートされていません。
|
||||||||||||||||
COLLECTION=schema name, NOCOLLECTION | パッケージに 8 字の COLLECTION (集合) 識別子を指定します。指定しない場合は、パッケージを処理しているユーザの権限識別子 (許可 ID) が使用されます。 | ||||||||||||||||
COMMIT={1 | 2 | 3 | 4} | 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 サーバはシステム定義のデフォルト値を使用します。
|
||||||||||||||||
DEFERRED_PREPARE={NO | YES | ALL}, NODEFERRED_PREPARE | DB2 共通サーバデータベース、または DRDA データベースにアクセスするときのパフォーマンスを拡張します。このオプションは、SQL PREPARE 文のフローと、それに関連する OPEN 文、DESCRIBE 文、または EXECUTE 文のフローを結び付け、プロセス間、またはネットワークのフローを最小化します。
|
||||||||||||||||
DEGREE={1 | degree-of-parallelism | ANY}, NODEGREE | I/O 並列処理を使用してクエリーを実行するかどうかを指定します。
|
||||||||||||||||
DISCONNECT={EXPLICIT | CONDITIONAL | AUTOMATIC}, NODISCONNECT |
|
||||||||||||||||
DYNAMICRULES={BIND | RUN | DEFINE | INVOKE}, NODYNAMICRULES | パッケージの動的 SQL が実行されたときに、どの権限識別子 (許可 ID) を使用するかを指定します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
| ||||||||||||||||
EXPLAIN={NO | YES | ALL}, NOEXPLAIN | パッケージの各 SQL 文に対して選択されたアクセス プランに関する情報を Explain テーブルに格納します。DRDA はこのオプションの ALL 値をサポートしていません。
|
||||||||||||||||
EXPLSNAP={NO | YES | ALL}, NOEXPLSNAP | Explain Snapshot 情報を Explain テーブルに格納します。この DB2 の事前コンパイル/バインドオプションは DRDA ではサポートされていません。
|
||||||||||||||||
FEDERATED={NO|YES} |
静的 SQL 文がニックネームまたは連合ビューを参照するかどうかを指定します。このオプションが指定されているのにパッケージが連合ビューやニックネームを参照していない場合や、このオプションが指定されていないのにパッケージが連合ビューやニックネームを参照している場合は、SQL エラーが戻されます。
|
||||||||||||||||
FORMAT={DEF | USA | EUR | ISO | JIS | LOC} | 日付/時刻フィールドがホスト変数の列表現に割り当てられたときの日付/時刻形式を指定します。DEFはデータベースの国番号に関連付けられている日付/時刻形式です。
同義語は DATETIMEです。 |
||||||||||||||||
FUNCPATH=schema-name , NOFUNCPATH | 静的 SQL 内でユーザ定義の互いに異なる型と関数を解決するために使用される関数パスを指定します。このオプションを指定しない場合のデフォルトの関数パスは次のとおりです。
"SYSIBM","SYS FUN",USER USER は USER 特殊レジスタの値です。この DB2 事前コンパイル/バインドオプションは DRDA ではサポートされていません。
|
||||||||||||||||
GENERIC=string | 新しいバインドオプションを対象の DRDA データベースに渡すための手段を提供します。各オプションは 1 つまたは複数の空白で区切られ、二重引用符で囲まれていなければなりません。指定例は DB2(GENERIC="keepdynamic yes") のようになります。 | ||||||||||||||||
GEN-INIT-FLAG, NOGEN-INIT-FLAG | DB2 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 プログラム内で使用された場合には、無効になります。
|
||||||||||||||||
INSERT={DEF | BUF}, NOINSERT | プログラムを事前コンパイル、またはバインドして、DB2 クライアントから DB2 サーバへ、パフォーマンス向上のためにデータ挿入のバッファを要求することを許可します。
|
||||||||||||||||
ISOLATION={CS | RR | UR | RS | NC} | このパッケージにバインドされたプログラムが、実行中の他のプログラムの影響から分離される程度を判断します。分離レベルについての詳細は、『IBM DB2 SQL Reference』 を参照してください。
|
||||||||||||||||
LANGLEVEL={SAA1 | NONE | MIA} | このオプションについての詳細は、『IBM DB2 アプリケーションプログラミングの手引き』 を参照してください。
同義語は 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 つ以上のホスト変数が同じ名前になる場合) を避けることができますが、次の副作用があります。
|
||||||||||||||||
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 ではサポートされていません。
|
||||||||||||||||
REPLVER=version-id, NOREPLVER | パッケージの特定のバージョンを置き換えます。バージョン識別子は、どのバージョンのパッケージを置き換えるかを指定します。最大長は 254 字です。 | ||||||||||||||||
RETAIN={YES | NO} , NORETAIN | RETAIN はパッケージが置き換えられるときに、EXECUTE 権限が保持されるかどうかを示します。パッケージの所有者が変わった場合は、新しい所有者が以前の所有者に BIND 権限と EXECUTE 権限を付与します。
ACTION=REPLACE または REPLVER を指定している場合、RETAIN はそのすぐあとに続けて指定する必要があります。 |
||||||||||||||||
SQLERROR={NOPACKAGE | CHECK | CONTINUE}, NOSQLERROR | エラーが発生した場合に、パッケージを作成するか、またはファイルをバインドするかどうかを示します。
構文が package オプションとともに使用されると、package は無視されます。 同義語は ERROR です。 |
||||||||||||||||
SQLFLAG={MVSDB2V23 | MVSDB2V31 | MVSDB2V41}-SYNTAX, NOSQLFLAG | 指定した SQL 言語構文から、偏差を識別し報告します。
sqlflag オプションに加えて、bindfile か package オプションが指定された場合にだけ、バインドファイルまたはパッケージが作成されます。 次のいずれかのオプションが指定された場合にだけ、ローカル構文検査が行われます。 sqlflag を指定しない場合には、フラグ機能は呼び出されず、バインドファイルまたはパッケージは影響されません。
同義語は FLAG です。 |
||||||||||||||||
SQLRULES={DB2 | STD}, NOSQLRULES | タイプ 2 CONNECT を DB2 の規則に準じて処理するか、ISO/ANS SQL92 に基づく標準 (STD) 規則に準じて処理するかを指定します。
同義語は RULES です |
||||||||||||||||
SQLWARN={YES | NO}, NOSQLWARN | 動的 SQL 文のコンパイルから (PREPARE または EXECUTABLE IMMEDIATE 経由で) 警告が戻されるか、または記述処理から (PREPARE...INTO または DESCRIBE 経由で) 警告が戻されるかを示します。この DB2 事前コンパイル/バインドオプションは DRDA ではサポートされていません。
備考:SQLCODE +238 は例外です。この警告は sqlwarn オプションの値にかかわらず、戻されます。 同義語は WARN です。 |
||||||||||||||||
STRDEL={APOSTROPHE | QUOTE}, NOSTRDEL | SQL 文内の文字区切りとしてアポストロフィ (') または二重引用符 (") のどちらを使用するか指定します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。このオプションが指定されない場合には、DRDA サーバはシステム定義のデフォルト値を使用します。
APOSTROPHE を指定すると、アポストロフィ (') を文字区切りとして使用します。 QUOTEを指定すると、二重引用符 (") を文字区切りとして使用します。 |
||||||||||||||||
SYNCPOINT={ONEPHASE | TWOPHASE | NONE}, NOSYNCPOINT | 複数のデータベース接続間でどのようにコミットまたはロールバックを調整するかを指定します。
|
||||||||||||||||
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 ではサポートされていません。
|
||||||||||||||||
VERSION=version-id, NOVERSION | パッケージのバージョン識別子を定義します。バージョン識別子は、英数字、$、#、@、_、-、または . で、長さは 254 字以内です。この DRDA 事前コンパイルオプションは DB2 ではサポートされていません。 |
コンパイル時に、数字と説明でエラー条件が戻されます。これらのメッセージの詳細については、ご使用のデータベースシステムのマニュアルで説明されています。ホスト変数を参照しているメッセージでは、ホスト変数の名前がわずかに変わります。ハイフンが下線 (_) になり、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
プログラムのコンパイル時に、技術的なサポートを要するエラーが発生した場合、サポート担当者から、問題の原因特定のためのデバッグファイルの提供を依頼されることがあります。こうしたデバッグファイルは、専用の 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 システムのソフトウェアのバグにかかわるエラーの場合に非常に有用です。 |
ECMLIST | program-name.lst | このファイルは標準の COBOL のリストファイルで、内容は、 EXEC SQL 文を置き換えるために生成されたコードを示す擬似 COBOL コードです。また、プログラムをCHKECM(CTRACE) 指令および LIST 指令でコンパイルする必要があります。 |
この節では、次のアプリケーションをビルドする方法について説明します。
DB2 アプリケーションを中間コードまたは生成コードとして実行する場合は、リンクする必要はありません。
DB2 アプリケーションを実行可能ファイルとしてリンクする場合は、以下のようにビルドします:
cob -xvt db2prog.cbl -N nolitlink
DB2 アプリケーションを呼び出し可能共有オブジェクトとしてリンクする場合は、以下のようにビルドします:
cob -zvt db2prog.cbl -N nolitlink
クライアント DB2 アプリケーションとそれが使用するストアドプロシージャをビルドするメソッドは 2 種類あります。以下の節では、それらのメソッドについて説明します。ここに示す client_app は単一の C モジュール client_app.c で構成されるクライアントアプリケーション、fred は単一の COBOL モジュール fred.cbl で構成されるストアドプロシージャです。
メソッド 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
クライアントプログラムが 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
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.