ALTER PACKAGE ステートメント

ALTER PACKAGE ステートメントは、パッケージのバインドや再バインドを行わずに、現行のサーバーでパッケージに関するバインド・オプションを変更します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
  • スキーマに対する ALTERIN 特権
  • パッケージに対する BIND 特権
  • スキーマに対する SCHEMAADM 権限
  • DBADM 権限
構文図を読む構文図をスキップするALTER PACKAGE package-name VERSIONversion-id 1ACCESS PLAN REUSEYESNOOPTIMIZATION PROFILENONEoptimization-profile-nameKEEP DYNAMICYESNO
注:
  • 1 同じ節を複数回指定することはできません。

説明

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 を指定できます。

例 1: パッケージ TRUUVERT.EMPADMIN に関するアクセス・プラン再利用を使用可能にします。
   ALTER PACKAGE TRUUVERT.EMPADMIN ACCESS PLAN REUSE YES
例 2: パッケージ TRUUVERT.EMPADMIN に関するアクセス・プラン再利用が使用可能になっていると想定します。 また、最適化プロファイル AYYANG.INDEXHINTS に、パッケージ内の特定のステートメントに関するステートメント・プロファイルが含まれていると想定します。 最適化プロファイルをこのパッケージと関連付けて、ステートメントに対するアクセス・プランの再使用がオーバーライドされるようにします。
   ALTER PACKAGE TRUUVERT.EMPADMIN OPTIMIZATION PROFILE AYYANG.INDEXHINTS
動的ステートメントはステートメントのコミット後に影響を及ぼします。静的ステートメントは次回の再バインド時に影響を及ぼします。 パッケージの再バインド時に、照会コンパイラーは、最適化プロファイルによって識別されるステートメントを除く、パッケージ内のすべての静的ステートメントにアクセス・プランを再使用しようとします。 このステートメントの再コンパイル時に、照会コンパイラーは代わりにステートメント・プロファイルを適用しようとします。
例 3: 以下のステートメントは、最適化プロファイルがパッケージ TRUUVERT.EMPADMIN と関連付けられない結果になります。
   ALTER PACKAGE TRUUVERT.EMPADMIN OPTIMIZATION PROFILE NONE