23.2.9 カーソルオプションの設定
ODBCインタフェース機能では,ODBCカーソルライブラリの静的カーソルを使用するように次の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で,カーソル使用中にほかのクエリを実行した場合,次に示すエラーが返されることがあります。
[Microsoft][ODBC SQL Server Driver] ほかの実行結果のために接続できません。
-
ODBCカーソルライブラリで,ディスク容量不足などによりテンポラリファイル※が作成できないとき,次に示すエラーなどが返されます。
[Microsoft][ODBC Cursor Library] 一般エラー:ファイル バッファーを作成できません。
-
ODBCカーソルライブラリが使用するテンポラリファイル※のサイズが上限サイズ(2ギガバイト)に達すると,プログラムがアクセス違反で異常終了することがあります。
- 注※
-
テンポラリファイルは,ODBCカーソルライブラリが内部的に作成,または使用するファイルです(COBOL2002で管理するファイルではありません)。出力先やファイル名については,ODBCカーソルライブラリの仕様を確認してください。
このような問題を回避するため,SQL Serverのデータベースに接続する場合は,実行時環境変数CBLSQLCURUSEを指定してください。
- 〈この項の構成〉
(1) 実行時環境変数CBLSQLCURUSE
- 形式
CBLSQLCURUSE=DYNAMIC
- 規則
-
- DYNAMIC
-
ODBCドライバのスクロール機能の動的カーソルを使用するように設定します。この実行時環境変数の指定がない場合は,ODBCカーソルライブラリの静的カーソルを使用するようにODBCオプションを設定します。DYNAMIC以外の値を指定した場合の結果は,保証しません。
DYNAMICを指定した場合,次の太字のオプションがデフォルトから変更されます。
表23‒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ドライバのリファレンスなどで確認してください。
対象 |
ODBCカーソルライブラリの静的カーソル使用時 |
ODBCドライバのスクロール機能の動的カーソル使用時 |
---|---|---|
SQL Serverのカーソル |
クライアントカーソル |
サーバカーソル |
カーソル使用中の他クエリ(SELECTを含むSQL文)の実行 |
実行できない。※1 |
実行できる。 |
副問い合わせなど複数のSELECTを含むSQL文の実行 |
サポートされる。 |
サポートされない。※2 |
SQL文1行のサイズ |
8,060バイトに制限されない。 |
8,060バイトに制限される。 |
テンポラリファイル |
作成される。※3 |
作成されない。 |