COBOL2002 ユーザーズガイド

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

24.2.11 動的SQLのODBC API関数発行の変更

SQL Server 2012では,メタデータ検出機能が強化されています。この影響で,使用されているSQL Serverをバージョンアップすると,SQL Serverのデータベースに動的SQLでアクセスするCOBOLプログラムの実行性能が劣化する場合があります。この場合,実行時環境変数CBLSQLDYNAMICを指定すると,実行性能が改善することがあります。

形式
CBLSQLDYNAMIC=REUSEBINDINFO

規則
  • 設定値が形式に従ってない場合,この環境変数の指定は無効です。
  • 環境変数CBLSQLDYNAMICにREUSEBINDINFOを指定すると,埋め込みSQL文で内部的に発行するODBC APIを次のとおりに変更し,1回目の埋め込みSQL文実行時に取得した情報で2回目以降も実行します。
・次の埋め込みSQL文を連続で実行した場合
2回目以降の実行では,1回目に取得した情報をバインド処理で再利用します。※1
  • EXECUTE文
  • 動的SQLをカーソルで実行する場合のOPEN文
  • 動的SQLをカーソルで実行する場合のOPEN文に対する最初のFETCH文
・PREPARE文で準備した動的SQLが,INSERT文,DELETE文,またはUPDATE文の場合
埋め込みSQL文のEXECUTE文を連続で実行したときに,2回目以降の実行では1回目に取得したODBCハンドル情報を再利用します。※2
注※1
2回目以降の埋め込みSQL文の実行で,内部的にSQLDescribeParam,SQLDescribeCol,SQLNumResultColsを呼び出さない(パラメタ,列情報を取得しない)ようにすることで,1回目の埋め込みSQL文の実行で取得したパラメタ,列情報を再利用します。
注※2
埋め込みSQL文のEXECUTE文の実行で,内部的にSQLFreeStmtをSQL_CLOSEパラメタ指定で呼び出さない(ODBCハンドル情報をクローズしない)ようにすることで,1回目の埋め込みSQL文のEXECUTE文の実行で取得したODBCハンドル情報を再利用します。