COBOL2002 ユーザーズガイド


23.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ハンドル情報を再利用します。