COBOL2002 ユーザーズガイド

[目次][用語][索引][前へ][次へ]

24.2.9 カーソルオプションの設定

ODBCインタフェース機能では,ODBCカーソルライブラリの静的カーソルを使用するように次のODBCのオプションを設定してSQLのカーソル処理を実現しています。

表24-4 ODBCのオプションに対応するSQLのカーソル処理

オプション名 設定値 機能
接続オプション SQLSetConnectOption(hdbc,SQL_ODBC_CURSORS,SQL_CUR_USE_ODBC); ドライバマネージャは,ドライバのスクロール機能を使用します。
ステートメントオプション SQLSetStmtOption(hstmt,SQL_CONCURRENCY,SQL_CONCUR_VALUES); カーソルは最適化同時実行制御を使用して値を比較します。
SQLSetStmtOption(hstmt,SQL_CURSOR_TYPE,SQL_SCROLL_STATIC); 結果セットのデータは静的なデータとなります。

しかし,このODBCオプションの設定でのカーソル処理では,次の制限事項があります。

このような問題を回避するため,SQL Serverのデータベースに接続する場合は,実行時環境変数CBLSQLCURUSEを指定してください。

<この項の構成>
(1) 実行時環境変数CBLSQLCURUSE
(2) 注意事項

(1) 実行時環境変数CBLSQLCURUSE

形式
CBLSQLCURUSE=DYNAMIC

規則
DYNAMIC
ODBCドライバのスクロール機能の動的カーソルを使用するように設定します。この実行時環境変数の指定がない場合は,ODBCカーソルライブラリの静的カーソルを使用するようにODBCオプションを設定します。DYNAMIC以外の値を指定した場合の結果は,保証しません。
DYNAMICを指定した場合,次の太字のオプションがデフォルトから変更されます。

表24-5 DYNAMICを指定した場合の設定値と機能

オプション名 設定値 機能
接続オプション SQLSetConnectOption(hdbc,SQL_ODBC_CURSORS,SQL_CUR_USE_DRIVER); ドライバマネージャは,ドライバのスクロール機能を使用します。
ステートメントオプション SQLSetStmtOption(hstmt,SQL_CONCURRENCY,SQL_CONCUR_VALUES); カーソルは最適化同時実行制御を使用して値を比較します。
SQLSetStmtOption(hstmt,SQL_CURSOR_TYPE,SQL_SCROLL_DYNAMIC); ドライバは行セットの行に対するキーだけを保存して使用します。

(2) 注意事項

この実行時環境変数を指定して,SQL Server以外のデータベースに接続する場合の動作は保証しません。

SQL ServerのODBCドライバを使用したODBCカーソルライブラリの静的カーソルを使用する場合と,ODBCドライバのスクロール機能の動的カーソルを使用する場合では,動作が異なります。例を次に示します。

詳細およびその他の動作については,SQL ServerのODBCドライバのリファレンスなどで確認してください。

表24-6 使用するカーソルによる動作の差異

対象 ODBCカーソルライブラリの静的カーソル使用時 ODBCドライバのスクロール機能の動的カーソル使用時
SQL Serverのカーソル クライアントカーソル サーバカーソル
カーソル使用中の他クエリ(SELECTを含むSQL文)の実行 実行できない。※1 実行できる。
副問い合わせなど複数のSELECTを含むSQL文の実行 サポートされる。 サポートされない。※2
SQL文1行のサイズ 8,060バイトに制限されない。 8,060バイトに制限される。
テンポラリファイル 作成される。※3 作成されない。

注※1
次のエラーが出力されます。
[Microsoft][ODBC SQL Server Driver]ほかの実行結果のために接続できません。

注※2
サーバカーソルではサポートしていませんが,SQL Serverのドライバによって暗黙的にカーソルを変更し,該当のSQL文を正常に実行します。
このとき,次の警告を出力します。また,この暗黙のカーソル変更は,該当のSQL文だけに有効です。
[Microsoft][ODBC SQL Server Driver]カーソルの種類が変更されました。
[Microsoft][ODBC SQL Server Driver]カーソルの同時性が変更されました。

注※3
テンポラリファイルが作成できない場合,次のエラーが出力されます。
[Microsoft][ODBC Cursor Library] 一般エラー:ファイル バッファーを作成できません。