OpenESQL

コンパイル

CHECK または DB コンパイラ指令オプションを指定して、64 ビットのデータ ソース名 (Data Source Name; DSN) を 32 ビット プラットフォームに使用する OpenESQL アプリケーションをコンパイルするには、64 ビット DSN と同じ名前の 32 ビット DSN を明示的に作成する必要があります。これを行うには、ODBC Data Source Administrator (32 ビット) または ADO.NET Connection Editor を使用します。実行プロセスは、引き続き 64 ビット DSN を使用します。

リンク

表示数値型が XXXXXX として定義されている SQL ホスト変数を含む COBOL コードのコンパイル時に CHARSET(EBCDIC) を使用する場合は、リンク エラーを防止するために oesqlebc ライブラリにリンクする必要があります。

リンクを IDE から設定して再コンパイルするか、コンパイル後にコマンド プロンプトから必要なコマンドを実行することができます。

コンパイルまたは再コンパイル前に、IDE から次の手順を実行します。

  1. ソリューション エクスプローラーで、プロジェクトに表示されている [Properties] エントリをダブルクリックします。
  2. [COBOL Link] タブで、[Link with libs] フィールドに対応する [Browse] ボタン [Browse] をクリックします。
  3. installDir\lib ディレクトリをブラウズします。ここで、installDirEnterprise Developer のインストール場所のパスで、デフォルトでは %ProgramFiles(x86)%\Micro Focus\Enterprise Developer です。
  4. oesqlebc.lib をダブルクリックして選択し、フィールドに値を入力します。
  5. [Save] をクリックして変更を保存します。

コンパイル後に、コマンド プロンプトから次の手順を実行します。

  1. Enterprise Developer command promptを起動します。手順については、「Enterprise Developer command promptを起動するには」を参照してください。
  2. コマンド プロンプトで、COBOL コードが格納されているディレクトリに切り替えます。
  3. 次のコマンドを連続して入力します。
    set lib=installDir\lib;%lib%
    cbllink myapp.obj oesqlebc.lib
    ここで、installDirEnterprise Developer のインストール場所のパスで、デフォルトでは %ProgramFiles(x86)%\Micro Focus\Enterprise Developer です。myapp は COBOL オブジェクト ファイルの名前です。

埋め込み SQL 文

1 つまたは複数の特殊文字が含まれているテーブル名または列名を指定する EXEC SQL 文では、プリプロセッサ エラーを防止するためにそのテーブル名または列名を引用符で囲む必要があります。特殊文字は、128 よりも大きい値を持つ ASCII 文字、または x"80" よりも大きい値を持つ 16 進文字です。

MySQL

  • ODBC でのみサポートされます。
  • OpenESQL はスクロール可能なカーソルをサポートしていません。
  • OpenESQL では、MySQL の _rowid フィールドを使用して、カーソルでの位置指定更新および位置指定削除の使用をサポートします。_rowid フィールドは、一意制約または整数列の主キーを使用してテーブルが定義されている場合にのみ MySQL で使用できます。
    注: テーブルが一意制約または整数列の主キーを使用して定義されていない場合は、EXEC SQL UPDATE/DELETE WHERE CURRENT OF 文を対応する検索対象の EXEC SQL UPDATE/DELETE 文に置き換える必要があります。
  • MySQL の行が更新されても行の内容は変更されない場合、MySQL では、影響を受ける行数について、他の DBMS から通常返される 1 ではなく、0 (ゼロ) を返すことがあります。この問題を回避するには、MySQL ODBC ドライバーの構成オプションを次のように変更することを検討してください。
    1. MySQL/Connector/ODBC データ ソース構成を呼び出します。
    2. [Cursors/Results] をクリックします。
    3. [Return matched rows instead of affected rows] をオンにします。
  • MySQL 5.7 と ODBC 5.3 ドライバーを使用する場合、次の制限が適用されます。
    • 修飾されていない SELECT * 文では、プロジェクション リストに他の項目を含めることはできません
    • ODBC エスケープ シーケンスは認識されません
    • MySQL では、1 つの SQL 文に対する、またはトランザクション限界内の複数の SQL 文に対する遅延制約チェックは許可されません
    • SQL TYPE BLOB ホスト変数の長さは 3M バイトに制限されています

ODBC

Oracle の ODBC ドライバーを使用しているときに、配列フェッチといくつかのスクロール フェッチで、フェッチ操作間に配列サイズを変更すると不一致が発生することがあります。この問題を克服するには、SQL(NORESULTARRAY) を使用してアプリケーションをビルドします。これを設定した場合、OpenESQL は単一行フェッチを隠れて実行し、この制限を回避します。

OpenESQL ODBC ネイティブ ランタイム

現在、OpenESQL アプリケーションはデフォルトでパフォーマンスの最適化が行われ、OpenESQL は BEHAVIOR コンパイラ指令を暗黙的に OPTIMIZED に設定します。旧製品では、BEHAVIOR コンパイラ指令は暗黙的に UNOPTIMIZED に設定されていました。この変更は、プログラムの動作に次のように影響する可能性があります。

  • SET SCROLLOPTION または SET CONCURRENCY EXEC SQL 文を含むプログラムのコンパイルに失敗します。この変更の影響を受けるプログラムについては、次のいずれかの操作を行ってください。
    • コンパイルする前に、BEHAVIOR コンパイラ指令を UNOPTIMIZED に設定します。これは最も単純な解決策ですが、パフォーマンスが低下する可能性があるため、この方法で解決することは推奨されません。
    • すべての SET SCROLLOPTION および SET CONCURRENCY 文を削除し、必要であれば DECLARE CURSOR 文を変更して、同じ動作になるように適切なパラメーターを含めます。たとえば、SET SCROLLOPTION 文と同じ動作を引き出すには、次の DECLARE CURSOR 文を使用します。
      EXEC SQL DECLARE cursorname SCROLL LOCK CURSOR FOR…

      デフォルトでは、カーソルは順方向で読み取り専用です。これが望ましい動作である場合は、別途の処理なしに SET 文を安全に削除できます。ただし、適切な方法として、デフォルト動作が常に明示的になるように FOR READ ONLY または FOR UPDATE をカーソル宣言に必ず含めることをお勧めします。Micro Focus では、この解決策をお勧めしていました。

  • OPTIMIZED 設定では、未確定カーソルが更新可能になりません。そのため、埋め込み SQL のデフォルト ANSI 規格に従ってカーソルが更新可能であると見なすアプリケーションは影響を受けます。この場合は、BEHAVIOR コンパイラ指令オプションを ANSI に設定することをお勧めします。
  • OPTIMIZED 設定では、スクロール可能なカーソルは想定されていません。そのため、カーソルがスクロール可能であると見なすアプリケーションは影響を受けます。この場合は、上記のように DECLARE CURSOR 文を変更して補正することをお勧めします。
重要: このように暗黙動作が変更されたことによって得られるパフォーマンスの向上を利用しない場合は、OpenESQL 構成ユーティリティを使用して、BEHAVIOR コンパイラ指令の暗黙値を UNOPTIMIZED に戻します。詳細については、「OpenESQL での埋め込み SQL カーソルの動作およびパフォーマンス」を参照してください。

PostgreSQL に関する推奨事項

  • PostgreSQL は、PIC X ホスト変数の NULL の date、time、または timestamp 値を受け付けません。SQL で CAST(:hostvar as TIMESTAMP) を使用するか、アプリケーションで SQL TYPE TIMESTAMP を使用する必要があります。
  • PostgreSQL では、埋め込み NULL 文字は binary 列でのみサポートされ、character 列ではサポートされません。
  • PostgreSQL と ODBC を併用する場合に、呼び出し元アプリケーションに負の SQL コードが返された際は、ODBC ドライバーのデフォルトの動作を変更しない限り、PostgreSQL によってトランザクションが暗黙的に中止されます。さらに、PostgreSQL では ODBC API 呼び出し SQLSetPos がサポートされず、更新可能カーソルのパフォーマンスが低下します。

    この問題を回避するには、psqlODBC ドライバーの構成オプションを変更することを検討してください。これを行うには、次の手順を行います。

    1. [PostgreSQL ANSI or UNICODE ODBC Driver (psqlODBC) Setup] ダイアログ ボックスを起動します。
    2. [Datasource] をクリックします。
    3. [Advanced Options] の 1 ページ目で、[Use Declare/Fetch] をオンにします。
    4. [Page 2] をクリックします。
    5. [Advanced Options] の 2 ページ目で、[Level of rollback on errors] オプションを [Statement] に設定し、[Updatable Cursors] をオフにします。