![]() | OpenESQL | COBSQL | ![]() |
この章では、Server Express を使用してコンパイルおよびリンクされた、埋め込み SQL 文を持つ COBOL プログラムから DB2 データベースへアクセスする方法を説明します。
DB2 外部コンパイラモジュール (ECM) は、Server Express が提供する新しいタイプの統合プリプロセッサであり、Micro Focus COBOL コンパイラとより密接に動作するように設計されています。DB2 ECM により、埋め込み SQL 文は DB2 データベース サービスへの適切な呼出しに変換されます。
サポートされるデータ型としては、『データ型』の章で説明されているものに加えて、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 データ型のひとつ。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 オプションを持つアプリケーションで複数のモジュールをコンパイルすると、プログラムが異常終了する可能性があります。
COBOL コンパイラで SQL プログラムをコンパイルするのは次の 2 つの手順と論理的に同等です。
これらの手順は、実際には単一のプロセスで行われており、COBOL コンパイラが DB2 ECM とともに行っています。
ユーザが SQL を使用しているということや、どのデータベースを使用しているかという情報を DB2 ECM に与えるには、DB2 コンパイラ指令を使用します。次の『DB2 コンパイラ指令』 を参照してください。
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 つの方法だけを使用する必要があります。
コンパイラ指令にはデフォルト値があり、他に値が指定されない場合に使用されます。これは既存の DB2 指令オプションのすべてについても同様です。これらのオプションの多くがコンパイル時に DB2 に直接渡され、値が指定されない場合には、コンパイラのデフォルトが使用されます。ただし、このような場合には、これらのオプションが適切かどうか、およびそのデフォルト値は DB2 の設定に左右されます。とくに、DDCS 経由で DRDA サーバに接続されているかどうかに依存します。このため、これらのオプションのデフォルトのコンパイラ設定は not set です。この場合は、DB2 には値が何も渡されず、デフォルト値は (適用可能な場合) DB2 自身によって判断されます。これらの値については、IBM DB2 の解説書を参照してください。
次の表は、DB2 コンパイラ指令のオプションを示します。デフォルト値は、太字で下線が引かれています。
オプション |
説明 |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
ACCESS=package name,ACCESS, NOACCESS | パッケージの名前を作成し、データベースに格納することを指定します。パラメータなしで ACCESS を指定すると、パッケージ名のデフォルトはプログラム名になります (.CBL 拡張子はつきません)。
同義語は PACKAGE です。 |
||||||||||
BIND=bindfile, BIND, NOBIND | 作成するバインドファイルの名前を指定します。パラメータなしで BIND を指定すると、バインドファイルのデフォルトは、ファイル名の拡張子が .BND に置き換えられたプログラム名になります。
同義語は BINDFILE です。 |
||||||||||
BLOCK={UNAMBIG | ALL | NO} | パッケージ作成の際に、レコード ブロック化モードを使用することを指定します。行ブロック化についての情報は、『IBM DB2 Administration Guide』、または 『Application Programming Guide』 を参照してください。
同義語は BLOCKINGです。 |
||||||||||
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 で指定されたデータベースが使用されます。 | ||||||||||
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 |
|
||||||||||
EXPLAIN={NO | YES | ALL}, NOEXPLAIN | パッケージの各 SQL 文に対して選択されたアクセス プランに関する情報を Explain テーブルに格納します。DRDA はこのオプションの ALL 値をサポートしていません。
|
||||||||||
EXPLSNAP={NO | YES | ALL}, NOEXPLSNAP | Explain Snapshot 情報を Explain テーブルに格納します。この DB2 の事前コンパイル/バインドオプションは DRDA ではサポートされていません。
|
||||||||||
FORMAT={DEF | USA | EUR | ISO | JIS | LOC} | 日付/時刻フィールドがホスト変数の列表現に割り当てられたときの日付/時刻形式を指定します。DEFはデータベースの国番号に関連付けられている日付/時刻形式です。
同義語は DATETIMEです。 |
||||||||||
FUNCPATH=schema-name , NOFUNCPATH | 静的 SQL 内でユーザ定義の互いに異なる型と関数を解決するために使用される関数パスを指定します。このオプションを指定しない場合のデフォルトの関数パスは次のとおりです。
"SYSIBM","SYS FUN",USER USER は USER 特殊レジスタの値です。この DB2 事前コンパイル/バインドオプションは DRDA ではサポートされていません。
|
||||||||||
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 です。 |
||||||||||
MSGAREA={data-item-name | MFSQLMESSAGETEXT },NOMSGAREA) | 英数字データ項目の名前を指定します。この項目がプログラム ソースに存在する場合は、自動的に DB2 エラー条件がこの項目に記述されます (SQLCODE がゼロではないとき)。 | ||||||||||
NOT={ascii character code | 172 } | NOT 文字 (¬) に使用する ASCII 文字コードを指定します。(¬). | ||||||||||
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 ではサポートされていません。 | ||||||||||
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 です。 |
||||||||||
SYNCPOINT={ONEPHASE | TWOPHASE | NONE}, NOSYNCPOINT | 複数のデータベース接続間でどのようにコミットまたはロールバックを調整するかを指定します。
|
次のオプションは DRDA サーバへ接続している場合にだけ有効です。
オプション | 説明 | ||||||||
ACTION={ADD | REPLACE }, NOACTION | ACTION はパッケージが追加できるか、または置きかえられるかどうかを示します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
|
||||||||
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 ではサポートされていません。
|
||||||||
DEC={31 | 15} , NODEC | 10 進数算術演算に使用する最大精度を指定します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。このオプションが指定されない場合には、DRDA サーバはシステム定義のデフォルト値を使用します。
15 を指定すると、10 進数算術演算に 15 桁の精度を使用します。 31 を指定すると、10 進数算術演算に 31 桁の精度を使用します。 |
||||||||
DECDEL={PERIOD | COMMA}, NODECDEL | 小数点定数および浮動小数点定数の小数点識別子として、ピリオド (.) またはコンマ (,) のどちらを使用するかを指定します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。このオプションが指定されない場合には、DRDA サーバはシステム定義のデフォルト値を使用します。
|
||||||||
DYNAMICRULES={BIND | RUN}, NODYNAMICRULES | パッケージの動的 SQL が実行されたときに、どの権限識別子 (許可 ID) を使用するかを指定します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
|
||||||||
LEVEL=consistency-token, NOLEVEL | 一貫性トークンを使用しているモジュールのレベルを定義します。一貫性トークンは、8 字以下の英数字の値です。RDB パッケージの一貫性トークンは、リクエスタのアプリケーションとリレーショナルデータベースパッケージが同期していることを検証します。この DRDA の事前コンパイルオプションは DB2 ではサポートされていません。
備考:通常の場合は、このオプションを使用しないことをお奨めします。 |
||||||||
OWNER=authorization-id, NOOWNER | パッケージの所有者に 8 字の権限識別子 (許可 ID) を指定します。所有者は、パッケージでの SQL 文の実行に必要な権限を持つ必要があります。このオプションが明示的に指定されていない場合には、デフォルトは事前コンパイル/バインド プロセスの一次権限識別子 (1次許可 ID) です。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
同義語は SCHEMA です。 |
||||||||
RELEASE={COMMIT | DEALLOCATE}, NORELEASE | 各 COMMIT ポイントで、またはアプリケーションの終了時にリソースが開放されるかどうかを示します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。
|
||||||||
REPLVER=version-id, NOREPLVER | パッケージの特定のバージョンを置き換えます。バージョン識別子は、どのバージョンのパッケージを置き換えるかを指定します。最大長は 254 字です。 | ||||||||
RETAIN={YES | NO} , NORETAIN | RETAIN はパッケージが置き換えられるときに、EXECUTE 権限が保持されるかどうかを示します。パッケージの所有者が変わった場合は、新しい所有者が以前の所有者に BIND 権限と EXECUTE 権限を付与します。
|
||||||||
SQLERROR={NOPACKAGE | CHECK | CONTINUE}, NOSQLERROR | エラーが発生した場合に、パッケージを作成するか、またはファイルをバインドするかどうかを示します。
構文が package オプションとともに使用されると、package は無視されます。 同義語は ERROR です。 |
||||||||
STRDEL={APOSTROPHE | QUOTE}, NOSTRDEL | SQL 文内の文字区切りとしてアポストロフィ (') または二重引用符 (") のどちらを使用するか指定します。この DRDA 事前コンパイル/バインドオプションは DB2 ではサポートされていません。このオプションが指定されない場合には、DRDA サーバはシステム定義のデフォルト値を使用します。
APOSTROPHE を指定すると、アポストロフィ (') を文字区切りとして使用します。 QUOTEを指定すると、二重引用符 (") を文字区切りとして使用します。 |
||||||||
SYNTAX | SQLERROR=CHECK 指令の同義語です。 | ||||||||
TEXT=label, NOTEXT | パッケージの記述。最大長は 255 字です。デフォルト値は空白です。この DRDA 事前コンパイル/バインドオプションは 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
DB2 アプリケーションを中間コードまたは生成コードとして実行する場合は、リンクする必要はありません。
ただし、DB2 アプリケーションを実行可能ファイルや呼び出し可能な共有オブジェクトとしてリンクする場合は、DB2 ライブラリをインクルードする必要があります。
DB2 アプリケーションを実行可能ファイルや呼び出し可能な共有オブジェクトとしてリンクする場合は、リンカーに DB2 ライブラリの場所と名前を知らせる必要があります。それを行うには、-L
および -l
cob
フラグを使用します。
デフォルトでは、Checker が事前にロードした呼び出しを cobdb2
に挿入しますが、これは中間コードや生成コードを実行する場合に必要となります。アプリケーションを実行可能ファイルや呼び出し可能共有オブジェクトとしてリンクする場合は、この事前ロードは必要ありません。したがって、事前ロードを以下のどちらかの方法で排除します。
$ cob -xv -C "DB2(NOPRE)" db2prog.cbl -Llocation of db2 libraries -ldb2 library -ldb2 library
-d
cob
フラグを使用します。たとえば、次のように指定します。
$ cob -xv -dcobdb2 db2prog.cbl -Llocation of db2 libraries -ldb2 library -ldb2 library
たとえば、 AIX では、提供されたサンプルプログラム db2test1.cbl をリンクするために使用するコマンドラインは、次のようになります。
$ cob -xvC "DB2(NOPRE)" db2test1.cbl -L/usr/lpp/db2_05_00/lib -ldb2 -ldb2gmf
DB2 コンパイラ指令の NOACCESS オプションを使用する場合や、コンパイルしたマシン以外のマシンでアプリケーションを実行しようとする場合は、実行する前にアプリケーションを特定のデータベースにバインドしてください。この場合には、BIND オプションを使用してバインドファイル作成し、DB2 BIND コマンドを使用してプログラムをデータベースにバインドします。詳細は、ご使用の SQL システムのマニュアルを参照してください。
Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書ならびに使用されている固有の商標と商品名は国際法で保護されています。
![]() | OpenESQL | COBSQL | ![]() |