OpenESQL アシスタントを使用して SQL CLR ストアド プロシージャを作成できます。このストアド プロシージャにより、選択したテーブル、クエリのタイプ、および列に基づいて SQL CLR プログラム全体が生成されます。このストアド プロシージャには、クエリの実行に必要なホスト変数が含まれています。
SQL CLR と互換性を保つように DB2 ストアド プロシージャを変換する必要がある場合には、ストアド プロシージャ定義 (SPD) ファイルを指定して SPD File Code Generator ツールを使用し、COBOL ラッパ プログラムを生成して元の DB2 ストアド プロシージャを呼び出すことができます。HCOSS Generate SPD File ツールを使用して、抽出した DB2 スキーマから SPD ファイルを生成できます。
Enterprise Developer を使用する際、SQL CLR ストアド プロシージャは少なくとも次の 2 つのプロジェクトで構成されています。
COBOL 呼び出しを正常に SQL CLR ストアド プロシージャ内からのルーチンに発行するには、次のいずれかを実行します。
ストアド プロシージャの別のプロジェクトと呼び出し先の COBOL ルーチンを使用する場合、次の点に注意してください。
SQL CLR ストアド プロシージャで読み取り専用のカーソルのパフォーマンスを最適化するには、OpenESQL がそれらのストアド プロシージャをどのように処理しているかを理解する必要があります。SQL CLR ストアド プロシージャでは、MARS (Multiple Active Result Sets) 指令を使用できないため、アクティブな結果セットを処理するために回避策を提供するよう OpenESQL に要求します。実装されるソリューションは、Enterprise Developer のバージョンに応じて異なります。
Enterprise Developer 2.1 の Hot Fix 8 以降では、OpenESQL は、SQL CLR ストアド プロシージャでのスクロール不可能な読み取り専用の COBOL カーソルに DYNAMIC サーバー カーソル オプションではなく、FAST FORWARD を使用するようデフォルト設定されています。通常、FAST FORWARD カーソルにより、動的カーソルよりも優れたクエリ アクセス プランが生成されますが、クエリ プランの効率はファイアホース カーソルほど高くない場合があります。
このシナリオでは、OpenESQL DATASET カーソルに切り替えることで、サーバー カーソルを完全に使用することを回避できます。この変更により、DECLARE CURSOR 文自体のコード変更が分離されます。ただし、この方法では、ストアド プロシージャで使用されるメモリに結果セット全体が格納されるという欠点があります。結果セットが大きい、または多くのクライアントから同時にプロシージャが呼び出された場合、これにより、カーソルが開いている間に SQL Server のメモリを消費する可能性があります。さらに、DATASET カーソルが読み取り専用のカーソルに制限されていない間は、これらのカーソルをロックできません。つまり、ペシミスティック同時実行を使用できません (位置付け UPDATE が引き続きサポートされている場合でも)。これにより、アプリケーション ロジックが失敗する可能性があります。
OPTION=OPTIMIZESPCURSORS 指令、または Enterprise Developer 2.2 Update 1 以降の場合は OPTIMIZESPCURSORS 指令を使用することで、コード変更を完全に回避することができます。この場合、OpenESQL はファイアホース カーソルを開きます。カーソルを閉じる前にその他のデータベース アクセスが発生した場合、OpenESQL によって結果セットの残りの部分が DATASET カーソルに変換されます。
ソース コードの変更 | SQL Server カーソル | 一時データベースのオーバーヘッド | 最適なクエリ プラン | メモリのオーバーヘッド | 文ごとの制御 | |
---|---|---|---|---|---|---|
シングルトン選択 | はい | ファイアホース | いいえ | はい | いいえ | はい |
読み取り専用のカーソル | いいえ | FAST FORWARD | はい (ただし、更新可能なカーソルよりも少ない) | 可能性 | いいえ | はい |
DATASET カーソル | はい (DECLARE CURSOR のみ) | ファイアホース | いいえ | はい | はい | はい |
OPTIMIZESPCURSORS を使用した読み取り専用のカーソル | いいえ | ファイアホース | いいえ | はい | 可能性あり | いいえ |
更新可能なカーソル (比較のために使用) | いいえ | 動的 | はい | いいえ | いいえ | はい |