DEFER および NODEFER バインド・オプション
DEFER および NODEFER オプションは、リモート・オブジェクトを参照する動的 SQL ステートメントの準備を据え置きにするか、それともすぐに準備を実行するかを判別します。
| コマンド・オプション | オプションの値 | と併用 |
|---|---|---|
|
|
DEFER(INHERITFROMPLAN)オプションは、ネイティブRESTサービスのパッケージのリバインドには有効ではありません。- DEFERおよびNODEFERのバインドオプションは、 ネイティブSQLプロシージャまたはアドバンスト・トリガのパッケージのREBINDには有効ではありません。
準備を先延ばしにすると、 Db2 が動的ステートメントを参照するEXECUTE、OPEN、またはDESCRIBEのタイプのステートメントを最初に検出したときに、動的ステートメントが準備されます。
- ローカル・バインドの場合は、パッケージは実行時にプランのオプションを継承します。
- リモートバインドの場合、デフォルトはリモート Db2 サーバーでのNODEFER(PREPARE)です。
REOPT(ALWAYS)、REOPT(AUTO)、またはREOPT(ONCE)のバインドオプションを指定した場合、 Db2 は自動的にDEFER(PREPARE)のバインドオプションを設定します。
DEFER と NODEFER の両方を使用することは できません。
DEFERとNODEFERのオプションの説明
- NODEEFER( 準備する )
- 準備の据え置きを行いません。
- DEFER(PREPARE)
- 準備を据え置きにします。
- DEFER(INHERITFROMPLAN)
- パッケージがリモートでバインドされたか、ローカルでバインドされたかに関係なく、ローカル・パッケージは、プランの DEFER オプションの値を継承します。
DEFER(INHERITFROMPLAN) オプションを使用してパッケージをリモートにバインドし、リモート・サーバーが INHERITFROMPLAN 値を認識しない場合には、サーバーがエラーを戻す場合があります。
以下の状態では、関連するプランが存在しないため、DEFER(INHERITFROMPLAN) 値は適用されません。
- アプリケーションをローカルにバインドし、パッケージをリモート・サーバーにコピーする場合。
- RRSAF を使用するアプリケーションをバインドする場合。
- ユーティリティー用に作成したパッケージの場合
こうした場合、NODEFER(PREPARE) がパッケージに対して有効になります。
DEFER(PREPARE)と分散処理
DRDAアクセス用の動的SQLをバインドする際は、NODEFER(PREPARE)ではなく、パフォーマンスを向上させるためにBINDオプションDEFER(PREPARE)を指定してください。 Db2 そのステートメントが実行されるまで、動的SQLステートメントを準備しません。 (この条件の例外は、動的 SELECT で、DEFER(PREPARE) オプションが有効であるかどうかに関係なく、PREPARE と DESCRIBE を組み合わせます。) 動的 SQL ステートメントがリモート・データにアクセスする場合、PREPARE と EXECUTE ステートメントは、ネットワーク上を一緒に伝送されて、リモート・ロケーションで処理されます。 両方のステートメントに対する応答が、一緒にローカル・サブシステムに戻されます。 これによってネットワーク・トラフィックが減少するため、 動的 SQL ステートメントのパフォーマンスが向上することになります。
INTO 文節を含む PREPARE ステートメントは据え置かれません。
- ステートメントが実行される
- アプリケーションが、ステートメントの結果の記述を要求する
PREPARE ステートメントを据え置きすることにした場合、EXECUTE または DESCRIBE ステートメント の後でその PREPARE ステートメントが戻す可能性のある SQL エラー・コードや SQLSTATE を 処理するようアプリケーションをコーディングしなければなりません。 PREPARE ステートメントを据え置きにできるのは、 バインド・オプション DEFER(PREPARE) を指定した場合に限られます。
DEFERとNODEFERのデフォルト値
| 処理 | デフォルトの 値 |
|---|---|
| BIND PLAN | NODEFER |
| BIND PACKAGE | プラン値 |
| REBIND PLAN | 既存の値 |
| REBIND PACKAGE | 既存の値 |
DEFERおよびNODEFERのカタログレコード
SYSPLAN カタログ・テーブルの DEFERPREP 列、または SYSPACKAGE カタログ・テーブルの DEFERPREPARE 列を参照してください。