OpenESQL

ADO.NET

  • ADO.NET と Oracle .NET プロバイダーを併用する場合は、シナリオによっては、元の部分的に管理されるプロバイダーと現在の完全に管理されるプロバイダーの動作が異なることに注意してください。これらの Oracle プロバイダーを切り替えると ADO.NET アプリケーションの動作が変わる場合は、プロバイダーを適切に構成していることを入念に確認してください。

COBOL ストアド プロシージャ

  • COBOL ストアド プロシージャの定義 (つまり、CREATE PROCEDURE 文) に INOUT パラメーターが含まれている場合は、そのストアド プロシージャに渡されるすべてのパラメーターの方向を明示的に宣言するように、アプリケーションによるそのストアド プロシージャのすべての呼び出しを変更する必要があります。CALL 文のコーディングに関する詳細は、「CALL」のトピックを参照してください。
  • COBOL ストアド プロシージャで、集団項目 (SQLCA 構造体など) との間でコピーを行う CHAR(n) パラメーターが使用されている場合は、そのパラメーターをストアド プロシージャの CREATE PROCEDURE 文で BINARY(n) として宣言し、クライアント アプリケーションで SQL TYPE BINARY(n) として宣言する必要があります。

コンパイル

  • DBMAN=ODBC を使用してマネージ コードとしてビルドする OpenESQL アプリケーションは、.NET Framework 4.0 以降をターゲットとしている場合にのみサポートされます。ODBC とマネージ コードには本質的な違いがあるため、Micro Focusは今後のリリースでマネージ コードを使用した DBMAN=ODBC を廃止する予定です。
  • DBMAN=ADO を使用してコンパイルするアプリケーションでは、SQL TRACELEVEL 指令はサポートされなくなりました。

動的 SQL

SQL 記述子領域 (SQLDA) を使用する動的 SQL は、次のシナリオの .NET マネージ コードではサポートされません。

  • DBMAN=ODBC 指令でコンパイルされた OpenESQL アプリケーション
  • 64 ビット プラットフォーム上で、プロジェクト プロパティの [Platform Target] が [x86] 以外に設定されている、DBMAN=ADO 指令でコンパイルされた OpenESQL アプリケーション

OpenESQL .NET Managed Runtime

現在、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 に関する推奨事項

  • 呼び出し元アプリケーションに負の SQL コードが返された際は、ODBC ドライバーまたは ADO.NET ドライバー、あるいはその両方のデフォルトの動作を変更しない限り、PostgreSQL によってトランザクションが暗黙的に中止されます。この欠点を回避するには、PreloadReader プロパティを True に設定して、Npgsql ADO.NET ドライバー構成を変更することを検討してください。
  • PostgreSQL は、PIC X ホスト変数の NULL の date、time、または timestamp 値を受け付けません。SQL で CAST(:hostvar as TIMESTAMP) を使用するか、アプリケーションで SQL TYPE TIMESTAMP を使用する必要があります。
  • PostgreSQL では、埋め込み NULL 文字は binary 列でのみサポートされ、character 列ではサポートされません。

SQL CLR 統合

  • SQL CLR 統合では、パラメーター名に - (ハイフン) 文字を使用することはできません。パラメーター名にハイフンを使用した場合は、ディプロイしようとすると次のメッセージが返されます。
    (144,0): error: .Net SqlClient Data Provider: Msg 102, Level 15, State 1, 
    Procedure procName, Line lineNo Incorrect syntax near '-'.
  • SQL Server 2017 では、厳格なセキュリティがデフォルトで有効になります。Enterprise Developer では、このレベルのセキュリティはサポートされません。Enterprise Developer で SQL Server 2017 を使用するには、SQL Server 2017 で SQL Server の厳格なセキュリティを無効にするか、SQL Server データベースの信頼性を確保して COBOL SQL CLR ストアド プロシージャをディプロイします。