ALTER PACKAGE ステートメント
ALTER PACKAGE ステートメントは、パッケージのバインドや再バインドを行わずに、現行のサーバーでパッケージに関するバインド・オプションを変更します。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
許可
- スキーマに対する ALTERIN 特権
- パッケージに対する BIND 特権
- スキーマに対する SCHEMAADM 権限
- DBADM 権限
説明
- package-name
- 変更するパッケージを指定します。パッケージ名は、現行サーバーに存在するパッケージを識別するものでなければなりません (SQLSTATE 42704)。
- VERSION version-id
- 変更するパッケージ・バージョンを指定します。
値が指定されない場合には、空ストリングがバージョンのデフォルトになります。同じパッケージ名が付けられていてもバージョンは異なる、複数のパッケージが存在する場合、ALTER PACKAGE ステートメントを 1 回呼び出すときに、1 つのパッケージ・バージョンだけを変更できます。次のような場合は、バージョン ID を二重引用符で区切ってください。
- バージョン ID が VERSION(AUTO) プリコンパイラー・オプションによって生成された場合
- バージョン ID が数字で始まる場合
- バージョン ID が小文字であったり、大/小文字混合である場合
- ACCESS PLAN REUSE
- 照会コンパイラーが、将来の暗黙および明示の再バインド時に、パッケージ内の静的ステートメントにアクセス・プランを再使用しようとする必要があるかどうかを示します。
- NO
- アクセス・プランを再使用しないことを指定します。
- YES
- アクセス・プランを再使用しようとすることを指定します。
- OPTIMIZATION PROFILE
- 最適化プロファイルがある場合、どの最適化プロファイルをパッケージと関連付けるかを示します。
- NONE
- 最適化プロファイルをパッケージと関連付けません。 既に最適化プロファイルがパッケージと関連付けられている場合は、関連が除去されます。
- optimization-profile-name
- 最適化プロファイル optimization-profile-name をパッケージと関連付けます。 最適化プロファイルは 2 部構成の名前です。 指定した optimization-profile-name が修飾されていない場合、CURRENT DEFAULT SCHEMA 特殊レジスターの値が暗黙的な修飾子として使用されます。 既に最適化プロファイルがパッケージと関連付けられている場合は、関連は optimization-profile-name と置き換えられます。
ALTER PACKAGE ステートメントを使用すると、データベース・パッケージ・キャッシュからパッケージの現在のコピーが削除されますが、パッケージは無効にならず、暗黙的な再バインドは行われません。つまり、このステートメントによる変更によって動的 SQL は影響を受けますが、静的ステートメントの照会実行プランは、次回の暗黙的再バインドまたは明示的再バインドまで影響を受けないことを意味します。
- KEEP DYNAMIC
-
パッケージに対する
KEEPDYNAMICバインド・オプションの値を変更できます。その際、新たなバインド操作は必要ないので、次のバインド操作が行われるまで、不必要な再コンパイルを避けることができます。このオプションは、準備済みステートメントに関連付けられたステートメント・テキストとセクションが SQL コンテキストに保持される時間の長さを制御します。 これが有効になるのは、このパッケージを使用しているすべてのアプリケーションが、ALTER PACKAGE ステートメントが実行されたときに実行中であったトランザクションを完了した後です。- YES
-
準備済みステートメントに関連付けられたステートメント・テキストとセクションが SQL コンテキストで無期限に保持されるように指示します。 動的 SQL ステートメントは複数のトランザクション間で保持されます。
KEEPDYNAMIC YESを使ってバインド済みのすべてのパッケージは、デフォルトで、既存のパッケージ・キャッシュの動作との互換性を保ちます。 - NO
-
各作業単位の終わりに、準備済みステートメントに関連付けられたステートメント・テキストとセクションが SQL コンテキストで除去されるように指示します。 準備済みステートメントの実行可能バージョンと、
KEEP DYNAMIC NOオプションを指定してバインドされたパッケージ内のステートメント・テキストは、トランザクション境界で SQL コンテキストから除去されます。 クライアント、ドライバー、またはアプリケーションにおいて動的 SQL ステートメントを再利用する場合には、それを新しい作業単位で再度準備する必要があります。IBM® 非組み込み API を使用するリモート・アプリケーションでは、ステートメントが新しいトランザクションで準備されることを確認した上でこのオプションを使用することにより、WLB が
KEEP DYNAMICの動作だけに基づいて許可されなくなるということを避けられます。 ただしこのオプションを使用した場合でも、他の理由で WLB が許可されなくなる場合があります。WITH HOLDオプションを指定したカーソルによって発行されたSELECTステートメントは、そのカーソルがクローズされる次回のトランザクション境界で、SQL コンテキストから関連付けが切断されます。 その結果、その SQL コンテキスト内でアプリケーションと関連付けられた準備済みステートメントの実行可能バージョンが存在しなければ、ワークロード・バランシングは許可されます。
注: IBM 非組み込み API を使用して SQL を共通クライアント・パッケージ内で実行する動的 SQL アプリケーション (JDBC、.NET、CLI/ODBC など) では、ワークロード・バランシングは制限されません。 これらのインターフェースでは、SQL ステートメントは、それらの接続が準備済みステートメントの新しい実行可能バージョンに移動されている可能性があるトランザクションで実行される前に、暗黙的に再準備されます。
注
- カタログ・ビューの値がパッケージに有効だった設定を反映しないことがある: このステートメントはパッケージの再バインドを起動しないので、SYSCAT.PACKAGES カタログ・ビューに示されているパッケージの設定は、最後の BIND または REBIND 時に実際に有効だった設定を反映しないことがあります。 ALTER_TIME が LAST_BIND_TIME より大きい場合が該当します。
- 代替構文: BIND コマンドと REBIND コマンドとの互換性のために、以下の代替の構文がサポートされています。
これらの代替は非標準であり、使用すべきではありません。
ACCESS PLAN REUSEの代わりにAPREUSEを指定できます。OPTIMIZATION PROFILEの代わりにOPTPROFILEを指定できます。KEEP DYNAMICの代わりにKEEPDYNAMICを指定できます。
例
TRUUVERT.EMPADMIN に関するアクセス・プラン再利用を使用可能にします。
ALTER PACKAGE TRUUVERT.EMPADMIN ACCESS PLAN REUSE YES ALTER PACKAGE TRUUVERT.EMPADMIN OPTIMIZATION PROFILE AYYANG.INDEXHINTS動的ステートメントはステートメントのコミット後に影響を及ぼします。静的ステートメントは次回の再バインド時に影響を及ぼします。
パッケージの再バインド時に、照会コンパイラーは、最適化プロファイルによって識別されるステートメントを除く、パッケージ内のすべての静的ステートメントにアクセス・プランを再使用しようとします。
このステートメントの再コンパイル時に、照会コンパイラーは代わりにステートメント・プロファイルを適用しようとします。
ALTER PACKAGE TRUUVERT.EMPADMIN OPTIMIZATION PROFILE NONE