以下を「Multi-Threaded Mixed Applications」セクションの終わりに追加します。
以下の情報は「スクロール可能カーソル」セクションに追加されています。
Unix、Windows、および OS/2 プラットフォームの UDB クライアントは、 OS/390 バージョン 7 データベースに対して実行されるとき、 更新可能なサーバー側のスクロール可能カーソルをサポートします。 3 階層環境で OS/390 スクロール可能カーソルにアクセスするには、 クライアントおよびゲートウェイが DB2 UDB バージョン 7.1 フィックスパック 3 またはそれ以降を 実行している必要があります。
スクロール可能カーソルにアクセスできる アプリケーション使用可能化インターフェースには、 ODBC と JDBC の 2 つがあります。 JDBC インターフェースは、静的スクロール可能カーソルにのみアクセスすることが可能で、 ODBC インターフェースは、静的およびキーセット・ドリブンの サーバー側スクロール可能カーソルにアクセスすることが可能です。
下の表では、ODBC での OS/390 バージョン 7 カーソルの デフォルト属性をリストします。
表 23. ODBC での OS/390 カーソルの デフォルト属性
カーソル・タイプ | カーソル感度 | カーソル更新可能 | カーソル並列性 | カーソル・スクロール可能 |
---|---|---|---|---|
フォワードのみa | 未指定 | 更新不可 | 読み取り専用並列性 | スクロール不可 |
静的 | 反映不可 | 更新不可 | 読み取り専用並列性 | スクロール可能 |
キーセット・ドリブン | 反映可能 | 更新可能 | 値並列性 | スクロール可能 |
|
すべての ODBC フェッチ方向が SQLFetchScroll または SQLExtendedFetch インターフェースで サポートされます。
キーセット・ドリブン・カーソルは更新可能なカーソルです。 照会が SELECT ... FOR READ ONLY として 実行されている場合、または FOR UPDATE 文節がすでに 指定されている場合を除いて、CLI ドライバーは FOR UPDATE 文節を 照会に追加します。 DB2 (OS/390 版) に実装されたキーセット・ドリブン・カーソルは、値並列性カーソルです。 値並列性カーソルを使用するとオプティミスティック・ロックになります。 更新または削除が試行されるまでロックは行われません。 更新または削除が試行されると、データベース・サーバーは、アプリケーションが検索した 以前の値を基礎表の現行値と比較します。 値が一致する場合、更新または削除は成功します。 値が一致しない場合、操作は失敗します。 失敗した場合、アプリケーションは値をもう一度照会して、 まだ適用可能であれば更新または削除を再実行します。
アプリケーションはキーセット・ドリブン・カーソルを以下の 2 つの方法で更新することができます。
スクロール可能カーソル・サポートは新しい機能であるため、
UDB (OS/390 版) または UDB (Unix 版、Windows 版、および OS/2 版) の前のリリースを
使用していた一部の ODBC アプリケーションでは、振る舞いまたはパフォーマンスが変わる
可能性があります。
スクロール可能カーソルを要求したアプリケーションは、
スクロール可能カーソルがサポートされる前は
フォワードのみカーソルを受け取っていたために、
このようなことが起こります。
スクロール可能カーソル・サポート前のアプリケーションの振る舞いを復元するには、
次の構成キーワードを db2cli.ini ファイルに設定します。
表 24. スクロール可能カーソル・サポート前のアプリケーションの振る舞いを復元する 構成キーワード値
構成キーワード設定 | 記述 |
---|---|
PATCH2=6 | スクロール可能カーソル (キーセット・ドリブンおよび静的) がサポートされていない というメッセージを返します。 CLI は、スクロール可能カーソルの要求をフォワードのみカーソルに 自動的にダウングレードします。 |
DisableKeysetCursor=1 | サーバー側とクライアント側の両方のキーセット・ドリブン・スクロール可能カーソルを使用不可にします。 これは、キーセット・ドリブン・カーソルが要求されたときに、CLI ドライバーによって アプリケーションが静的カーソルを提供することを強制するために使用されます。 |
UseServerKeysetCursor=0 | クライアント側のキーセット・ドリブン・カーソル・ライブラリーを使用して キーセット・ドリブン・カーソルをシミュレートするアプリケーションに対してサーバー側の キーセット・ドリブン・カーソルを使用不可にします。 サーバー側のキーセット・ドリブン・カーソルで問題が発生した場合のみ、このオプションを使用します。 クライアント側のカーソルは大量のオーバーヘッドを発生させ、 通常、サーバー側のカーソルよりパフォーマンスが劣ってしまうためです。 |
以下の注釈がブックから欠落しています:
動的に用意できる SQL ステートメントは、照会の場合を除いて、 複合ステートメント内のステートメントとして実行できます。 注釈: アトミック複合 SQL 内で、保管点、リリース保管点、および SQL ステートメントの 保管点へのロールバックもまた許可されません。逆に、アトミック複合 SQL は 保管点で許可されません。
以下は、CLI ストアード・プロシージャーで文書化されていない制限です:
複数 CLI ストアード・プロシージャーへの呼び出しを行う場合、 次のストアード・プロシージャーを呼び出す前に、アプリケーションは ストアード・プロシージャーからオープン・カーソルをクローズする必要があります。 具体的には、オープン・カーソルの最初のセットを、次のストアード・プロシージャーが カーソルをオープンする前にクローズしなければなりません。
以下は、ブックの補足情報です。
CLI/ODBC ドライバーは、CLI/ODBC アプリケーションが、データベースに対して SQL を 初めて実行した時に、ユーザーに適切な特権または許可がある 場合、CLI パッケージを自動バインドします。CLI パッケージの自動バインドは、 ストアード・プロシージャー内から実行できません。そのため、アプリケーションが最初に 行うことが CLI ストアード・プロシージャーの呼び出しである場合、この自動バインドは起きません。新しい DB2 データベースに対して CLI ストアード・プロシージャーを呼び出す CLI アプリケーションを実行する前に、 次のコマンドで、一度 CLI パッケージをバインドする必要があります。
db2 bind <BNDPATH>/@db2cli.lst blocking all
db2bind "%DB2PATH%\bnd\@db2cli.lst" blocking
お勧めするアプローチとしては、データベースが、実行時に自動バインドするのを回避する ために作成される時に、このパッケージを常にバインドする方法があります。自動バインドは、ユーザーに 特権がない場合、または別のアプリケーションが同時に自動バインドを行っている場合には失敗します。