リリース情報


40.6 第 3 章 拡張フィーチャーの使用法

|40.6.1 マルチスレッド・アプリケーションの書き込み

|以下を「Multi-Threaded Mixed Applications」セクションの終わりに追加します。

|注:
デフォルトのスタック・サイズを使用せずに、スタック・サイズを |少なくとも 256 000 に増やすことをお勧めします。DB2 では、DB2 関数の呼び出し時に |必要な最小スタック・サイズは 256 000 です。したがって、お使いのアプリケーションと、 |DB2 関数呼び出し時の最小要件の両方を十分に満たす合計スタック・サイズが割り当てられている |ことを確認する必要があります。 |

40.6.2 DB2 CLI ユニコード・アプリケーションの作成

以下は、この章の新しいセクションです。

DB2 CLI ユニコード・アプリケーションのサポート領域には次の 2 つがあります。

  1. ANSI ストリング引き数の代わりにユニコード・ストリング引き数を受け入れ可能な関数のセットの追加。
  2. ANSI またはユニコード・データとしてデータを記述する、新しい C および SQL データ・タイプの追加。以下のセクションは、これらの領域の両方についての詳細を提供します。ユニコード・アプリケーションと認識されるためには、アプリケーションは接続を行う前に、 SQL_ATTR_ANSI_APP 接続属性を SQL_AA_FALSE に設定する必要があります。これにより、 CLI はユニコード・クライアントとして接続し、ユニコード・データはすべて、 CHAR データでは UTF-8、GRAPHIC データでは UCS-2 で送信されます。

40.6.2.1 ユニコード関数

以下は、ユニコード (W) および ANSI (A) の両方をサポートする ODBC API 関数のリストです (ユニコードの関数名には W が付きます)。

SQLBrowseConnect        SQLForeignKeys          SQLPrimaryKeys
SQLColAttribute         SQLGetConnectAttr       SQLProcedureColumns
SQLColAttributes        SQLGetConnectOption     SQLProcedures
SQLColumnPrivileges     SQLGetCursorName        SQLSetConnectAttr
SQLColumns              SQLGetDescField         SQLSetConnectOption
SQLConnect              SQLGetDescRec           SQLSetCursorName
SQLDataSources          SQLGetDiagField         SQLSetDescField
SQLDescribeCol          SQLGetDiagRec           SQLSetStmtAttr
SQLDriverConnect        SQLGetInfo              SQLSpecialColumns
SQLDrivers              SQLGetStmtAttr          SQLStatistics
SQLError                SQLNativeSQL            SQLTablePrivileges
SQLExecDirect           SQLPrepare              SQLTables

常にストリング長引き数を返す、または取得するユニコード関数は、文字数のカウントとして渡されます。サーバー・データに対して長さの情報を返す関数では、表示サイズは文字の数で示されます。長さ (データの転送サイズ) がストリングまたはストリング以外のデータを参照するときは、長さはオクテット長で示されます。たとえば、SQLGetInfoW は長さをバイト・カウントとして取りますが、SQLExecDirectW は文字数のカウントを使用します。CLI は結果セットを、アプリケーションのバインドに応じてユニコードまたは ANSI で返します。アプリケーションが SQL_C_CHAR にバインドする場合、ドライバーは SQL_WCHAR データを SQL_CHAR に変換します。ドライバー・マネージャーは、 ANSI ドライバーについては SQL_C_WCHAR を SQL_C_CHAR にマップしますが、ユニコード・ドライバーについてはマッピングを行いません。

40.6.2.2 新しいデータ・タイプと有効な変換

2 つの新しい CLI または ODBC 定義のデータ・タイプ、SQL_C_WCHAR および SQL_WCHAR があります。SQL_C_WCHAR は、C バッファーに UCS-2 データが含まれていることを指示します。 SQL_WCHAR は、特定の列またはパラメーター・マーカーにユニコード・データが含まれていることを指示します。DB2 ユニコード・サーバーの場合、漢字列は SQL_WCHAR として記述されます。漢字データ間で行われるのと同様に、SQL_C_WCHAR と SQL_CHAR、 SQL_LONGVARCHAR と SQL_CLOB の間で変換が行われます。


表 10. サポートされるデータ変換

SQL データ・
タイプ
S
Q
L
_
C
_
C
H
A
A
S
Q
L
_
C
_
W
C
H
A
A
S
Q
L
_
C
_
L
O
N
G
S
Q
L
_
C
_
S
H
O
A
T
S
Q
L
_
C
_
T
I
N
Y
I
N
T
S
Q
L
_
C
_
F
L
O
A
T
S
Q
L
_
C
_
D
O
U
B
L
M
S
Q
L
_
C
_
T
Y
P
M
_
D
A
T
M
S
Q
L
_
C
_
T
Y
P
M
_
T
I
M
M
S
Q
L
_
C
_
T
Y
P
M
_
T
I
M
M
S
T
A
M
P
S
Q
L
_
C
_
B
I
N
A
A
Y
S
Q
L
_
C
_
B
I
T
S
Q
L
_
C
_
D
B
C
H
A
A
S
Q
L
_
C
_
C
L
O
B
_
L
O
C
A
T
O
A
S
Q
L
_
C
_
B
L
O
B
_
L
O
C
A
T
O
A
S
Q
L
_
C
_
D
B
C
L
O
B
_
L
O
C
A
T
O
A
S
Q
L
_
C
_
B
I
G
I
N
T
S
Q
L
_
C
_
N
U
M
M
A
I
C
BLOB
X
X









D




X
CHAR
D
X
X
X
X
X
X
X
X
X
X
X




X
X
CLOB
D
X









X



X


DATE
X
X






D


X






DBCLOB


X









X


D



X
DECIMAL
D
X
X
X
X
X
X




X
X




X
X
DOUBLE
X
X
X
X
X
X
D





X




X
X
FLOAT
X
X
X
X
X
X
D





X




X
X
GRAPHIC
(非ユニコード)
X
X











D



GRAPHIC
(ユニコード)
X
X
X
X
X
X
X
X
X
X
X
X
D




X


INTEGER
X
X
D
X
X
X
X





X




X
X
LONG
VARCHAR
D
X









X





LONG
VARGRAPHIC
(非ユニコード)
X
X









X


D



LONG
VARGRAPHIC
(ユニコード)
X
X









X


D






NUMERIC
D
X
X
X
X
X
X





X




X
REAL
X
X
X
X
X
D
X





X




X
SMALLINT
X
X
X
D
X
X
X





X




X
X
BIGINT
X
X
X
X
X
X
X




X
X




D
X
TIME
X
X







D
X






TIMESTAMP
X
X






X
X
D






VARCHAR
D
X
X
X
X
X
X
X
X
X
X
X




X
X
VARGRAPHIC
(非ユニコード)
X
X











D



VARGRAPHIC
(ユニコード)
X
X
X
X
X
X
X
X
X
X
X
X
D




X


注:

D
変換がサポートされています。これは SQL データ・タイプのデフォルト変換です。

X
IBM DBMS はすべて変換をサポートしています。

ブランク
IBM DBMS は変換をサポートしていません。

40.6.2.3 古いキーワード/パッチ値

ユニコード・アプリケーションがサポートされるようになるまでは、GRAPHIC=1、2、または 3 や Patch2=7 といった一連の cli ini ファイル・キーワードによって、単一バイト文字データの操作用に作成されたアプリケーションが 2 バイト漢字データを操作できるようにしていました。これらの回避策では、漢字データを文字データとして表示しており、報告されるデータの長さにも影響が出ました。

|これらのキーワードは、ユニコード・アプリケーションの場合には不要であり、 |さらに潜在的な副次作用を持つ危険性があるため、使用しないようにしてください。あるアプリケーションがユニコード・ |アプリケーションかどうかがわからない場合は、漢字データの処理に影響する |キーワードなしで試してみることをお勧めします。

40.6.2.4 ユニコード・データベースのリテラル

非ユニコード・データベースでは、LONG VARGRAPHIC および LONG VARCHAR 列のデータは比較できません。 GRAPHIC/VARGRAPHIC および CHAR/VARCHAR 列のデータは、比較のみが可能か、または暗黙的コード・ページ変換がサポートされていないため、明示的な cast 関数を使用して相互に割り当てることができます。これには、GRAPHIC/VARGRAPHIC リテラルが G 接頭部によって CHAR/VARCHAR と区別される、GRAPHIC/VARGRAPHIC および CHAR/VARCHAR が含まれます。

ユニコード・データベースについては、GRAPHIC/VARGRAPHIC および CHAR/VARCHAR リテラル間のキャストは不要です。また、G 接頭部は GRAPHIC/VARGRAPHIC リテラルの前には必要ありません。少なくとも 1 つの引き数がリテラルの場合、暗黙的変換が行われます。これにより、リテラルは G 接頭部を持っていても持っていなくても、 SQLPrepareW() または SQLExecDirect() を使用するステートメント内で使用することができます。LONG VARGRAPHIC のリテラルには G 接頭部が必要です。

詳しくは、SQL 解説書 の「第 3 章、言語エレメント」の「データ・タイプ間のキャスト」を参照してください。

40.6.2.5 新しい CLI 構成キーワード

ユニコード・アプリケーションがデータベースに接続するときに余分なオーバーヘッドを避けるために、次の 3 つのキーワードが追加されました。

  1. DisableUnicode

    キーワードの説明:
    ユニコードのサポートを使用不可にします。

    db2cli.ini キーワード構文
    DisableUnicode = 0 | 1

    デフォルト設定
    0 (false)

    DB2 CLI/ODBC 設定タブ:
    このキーワードは CLI/ODBC 設定ノートブックで設定することはできません。このキーワードを使用するためには、db2cli.ini ファイルを直接変更する必要があります。

    使用上の注意:

    ユニコード・サポートが使用可能になっている場合、ユニコード・アプリケーションから呼び出されると、CLI はコード・ページ変換による不要なデータ損失のないように、最適なクライアント・コード・ページを使用してデータベースに接続しようとします。そのために、コード・ページ交換のために接続時間が増加するか、またはこのサポートが追加されるまでは行われていなかったクライアントでのコード・ページ変換が行われる可能性があります。

    このキーワードを true に設定すると、すべてのユニコード・データは最初に (サーバーに送信される前に) アプリケーションのローカル・コード・ページに変換されます。このことが原因で、ローカル・コード・ページでは表示できないデータが失われることがあります。

  2. ConnectCodepage

    キーワードの説明:
    余分な接続オーバーヘッドを避けるために、データ・ソースへの接続時に使用する特定のコード・ページを指定します。

    db2cli.ini キーワード構文
    ConnectCodepage = 0 | 1 <任意の有効な db2 コード・ページ>

    デフォルト設定
    0

    DB2 CLI/ODBC 設定タブ:
    このキーワードは CLI/ODBC 設定ノートブックで設定することはできません。このキーワードを使用するためには、db2cli.ini ファイルを直接編集する必要があります。

    使用上の注意:

    非ユニコード・アプリケーションは、データベースへの接続時には常にそのアプリケーションのローカル・コード・ページか DB2Codepage 環境設定を使用します。デフォルトでは、CLI により、ユニコード・アプリケーションはユニコード・データベースへの接続時には常に UTF-8 および UCS-2 コード・ページを使用し、非ユニコード・データベースへの接続時には常にそのデータベースのコード・ページを使用するようになっています。これにより、コード・ページ変換による不要なデータ損失が確実に回避されます。

    このキーワードを使用すれば、非ユニコード・データベースに接続するときにはそのデータベースのコード・ページを指定して、接続時に余分なオーバーヘッドが生じないようにできます。

    値 1 を指定すると、SQLDriverConnect() は出力接続ストリングに正しい値を返します。これにより値を以降の SQLDriverConnect() 呼び出しで使用することができます。

  3. UnicodeServer

    キーワードの説明:
    データ・ソースがユニコード・サーバーであることを指示します。ConnectCodepage=1208 の設定と同じです。

    db2cli.ini キーワード構文
    UnicodeServer = 0 | 1

    デフォルト設定
    0

    DB2 CLI/ODBC 設定タブ:
    このキーワードは CLI/ODBC 設定ノートブックで設定することはできません。このキーワードを使用するためには、db2cli.ini ファイルを直接変更する必要があります。

    使用上の注意:

    このキーワードは ConnectCodepage=1208 と同じもので、便宜上追加されたものです。 DB2 (OS/390 版) バージョン 7 またはそれ以降に接続するときの余分な接続オーバーヘッドを避けるためにこのキーワードを設定してください。DB2 (Windows 版)、DB2 (Unix 版)、または DB2 (OS/2 版) については、余分な処理が必要にならないため、このキーワードを設定する必要はありません。

|40.6.3 トランザクション・モニターとしての Microsoft Transaction Server (MTS)

|「インストールおよび構成」サブセクションに記載されている DISABLEMULTITHREAD 構成キーワードの |デフォルト値は、次のように訂正されます。 |

40.6.4 スクロール可能カーソル

以下の情報は「スクロール可能カーソル」セクションに追加されています。

40.6.4.1 サーバー側のスクロール可能カーソル・サポート (OS/390)

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 カーソルのデフォルト属性をリストします。


表 11. ODBC での OS/390 カーソルの デフォルト属性

カーソル・タイプ カーソル感度 カーソル更新可能 カーソル並列性 カーソル・スクロール可能
フォワードのみa 未指定 更新不可 読み取り専用並列性 スクロール不可
静的 反映不可 更新不可 読み取り専用並列性 スクロール可能
キーセット・ドリブン 反映可能 更新可能 値並列性 スクロール可能

a フォワードのみは、FOR UPDATE 文節を使用しないスクロール可能カーソルのデフォルトの振る舞いです。フォワードのみカーソルで FOR UPDATE を指定すると、更新可能、ロック並列性、スクロール不可のカーソルが作成されます。


サポートされているフェッチ方向

すべての 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 ファイルに設定します。


表 12. スクロール可能カーソル・サポート前のアプリケーションの振る舞いをリストアする 構成キーワード値

構成キーワード設定 記述
PATCH2=6 スクロール可能カーソル (キーセット・ドリブンおよび静的) がサポートされていないというメッセージを返します。CLI は、スクロール可能カーソルの要求をフォワードのみカーソルに自動的にダウングレードします。
DisableKeysetCursor=1 サーバー側とクライアント側の両方のキーセット・ドリブン・スクロール可能カーソルを使用不可にします。これは、キーセット・ドリブン・カーソルが要求されたときに、CLI ドライバーによってアプリケーションが静的カーソルを提供することを強制するために使用されます。
UseServerKeysetCursor=0 クライアント側のキーセット・ドリブン・カーソル・ライブラリーを使用してキーセット・ドリブン・カーソルをシミュレートするアプリケーションに対してサーバー側のキーセット・ドリブン・カーソルを使用不可にします。サーバー側のキーセット・ドリブン・カーソルで問題が発生した場合のみ、このオプションを使用します。クライアント側のカーソルは大量のオーバーヘッドを発生させ、通常、サーバー側のカーソルよりパフォーマンスが劣ってしまうためです。

40.6.5 複合 SQL の使用

以下の注釈がブックから欠落しています。

   動的に準備可能な照会以外の任意の SQL ステートメントは、
   複合ステートメント内のステートメントとして実行できます。
 
   注釈: アトミック複合 SQL 内で、保管点、リリース保管点、および
   SQL ステートメントの保管点へのロールバックは許可されていません。
   一方、アトミック 複合 SQL は保管点では許可されていません。

40.6.6 ストアード・プロシージャーの使用

40.6.6.1 CLI でのストアード・プロシージャーの記述

以下は、CLI ストアード・プロシージャーで文書化されていない制限です。

   複数 CLI ストアード・プロシージャーへの呼び出しを行う場合、
   次のストアード・プロシージャーを呼び出す前に、アプリケーションは
   ストアード・プロシージャーからオープン・カーソルをクローズする
   必要があります。具体的には、オープン・カーソルの最初のセットを、
   次のストアード・プロシージャーがカーソルをオープンしようとする前に、
   クローズする必要があります。

40.6.6.2 CLI ストアード・プロシージャーおよび自動バインド

以下は、ブックの補足情報です。

CLI/ODBC ドライバーは、CLI/ODBC アプリケーションが、データベースに対して SQL を初めて実行した時に、ユーザーに適切な特権または許可がある場合、CLI パッケージを自動バインドします。CLI パッケージの自動バインドは、ストアード・プロシージャー内から実行できません。そのため、アプリケーションが最初に行うことが CLI ストアード・プロシージャーの呼び出しである場合、この自動バインドは起きません。新しい DB2 データベースに対して CLI ストアード・プロシージャーを呼び出す CLI アプリケーションを実行する前に、次のコマンドで、一度 CLI パッケージをバインドする必要があります。

UNIX
db2 bind <BNDPATH>/@db2cli.lst blocking all

Windows および OS/2
db2bind "%DB2PATH%\bnd\@db2cli.lst" blocking

お勧めするアプローチとしては、データベースが、実行時に自動バインドするのを回避するために作成される時に、このパッケージを常にバインドする方法があります。自動バインドは、ユーザーに特権がない場合、または別のアプリケーションが同時に自動バインドを行っている場合には失敗します。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]