ALTER
PACKAGE
文は、パッケージの仕様部、本体、またはその両方を明示的に再コンパイルします。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、関連する実行時コンパイル・エラーおよびパフォーマンス・オーバーヘッドが発生しなくなります。
パッケージ内のすべてのオブジェクトは1つの単位として格納されるため、ALTER
PACKAGE
文によって、すべてのパッケージ・オブジェクトが再コンパイルされます。ALTER
PROCEDURE
文またはALTER
FUNCTION
文を使用して、パッケージの一部であるプロシージャまたはファンクションを個別に再コンパイルすることはできません。
注意:
この文では、既存のパッケージの宣言または定義は変更されません。パッケージを再宣言または再定義するには、CREATE PACKAGE文を使用するか、またはCREATE PACKAGE BODY文をOR
REPLACE
句とともに使用します。
ここでのトピック
前提条件
パッケージがSYS
スキーマ内にある場合、SYSDBA
として接続する必要があります。そうでない場合は、パッケージが自分のスキーマ内にあるか、ALTER
ANY
PROCEDURE
システム権限が必要です。
構文
alter_package::=
package_compile_clause ::=
compiler_parameters_clause::=
セマンティクス
schema
パッケージが含まれているスキーマの名前。デフォルト: 自分のスキーマ。
package_name
再コンパイルするパッケージの名前。
COMPILE
パッケージ仕様部、パッケージ本体、またはその両方が再コンパイルされます。
再コンパイル中、データベースによってコンパイラの永続的なスイッチ設定はすべて削除され、セッションから再度取得されて、コンパイル後に格納されます。この処理を回避するには、REUSE
SETTINGS
を指定します。
DEBUG
PLSQL_OPTIMIZE_LEVEL=1
と同じ効果があり、PL/SQLデバッガで使用するためのコードを生成して格納するようにPL/SQLコンパイラに指示します。DEBUG
ではなく、PLSQL_OPTIMIZE_LEVEL=1
を使用することをお薦めします。
SPECIFICATION
有効か無効かに関係なくパッケージ仕様部のみが再コンパイルされます。仕様部を変更した後、パッケージ仕様部を再コンパイルしてコンパイル・エラーを確認できます。
パッケージ仕様部を再コンパイルすると、仕様部に依存するローカル・オブジェクト(パッケージ内のプロシージャまたはファンクションを起動するプロシージャなど)がデータベースによって無効にされます。パッケージの本体も仕様部に依存します。その後、最初に明示的に再コンパイルせずにこれらの依存オブジェクトのいずれかを参照すると、データベースによって実行時にそのオブジェクトが暗黙的に再コンパイルされます。
BODY
有効か無効かに関係なくパッケージ本体のみが再コンパイルされます。パッケージ本体は、変更した後に再コンパイルできます。パッケージ本体を再コンパイルしても、パッケージ仕様部に依存するオブジェクトは無効になりません。
パッケージ本体の再コンパイル時にその本体が依存するオブジェクトのいずれかが無効な場合は、データベースによってそれらのオブジェクトが最初に再コンパイルされます。本体は、データベースによって正常に再コンパイルされた場合に有効になります。
PACKAGE
(デフォルト)有効か無効かに関係なくパッケージ仕様部とパッケージ本体(存在する場合)の両方が再コンパイルされます。パッケージ仕様部および本体を再コンパイルした場合、SPECIFICATION
およびBODY
で説明されているように、依存オブジェクトの無効化および再コンパイルが行われます。
REUSE SETTINGS
パッケージに対する動作は、ファンクションに対する動作と同様です。「REUSE SETTINGS」を参照してください。
compiler_parameters_clause
パッケージに対する動作は、ファンクションに対する動作と同様です。「ALTER
FUNCTION
」の「ALTER FUNCTION文」を参照してください。
{ EDITIONABLE | NONEDITIONABLE }
schema
でスキーマ・オブジェクト・タイプPACKAGE
に対して後からエディションが有効化された場合に、パッケージがエディション・オブジェクトまたは非エディション・オブジェクトのどちらになるかを指定します。デフォルト: EDITIONABLE
。エディション・オブジェクトと非エディション・オブジェクトの変更の詳細は、『Oracle Database開発ガイド』を参照してください。
例
例14-1 パッケージの再コンパイル: 例
この文は、hr.emp_mgmt
パッケージの仕様部と本体を明示的に再コンパイルします。このパッケージを作成する例については、「create_package.htm#GUID-03A70A54-90FF-4293-B6B8-F0B35E184AC5__I2088318」を参照してください。
ALTER PACKAGE emp_mgmt COMPILE PACKAGE;
emp_mgmt
仕様部および本体の再コンパイル中にデータベースでコンパイル・エラーが発生しなかった場合、emp_mgmt
は有効となります。その後、ユーザーhr
は、emp_mgmt
の仕様部で宣言されたすべてのパッケージ・オブジェクトを実行時に再コンパイルせずに起動または参照できます。emp_mgmt
の再コンパイル時にコンパイル・エラーが発生した場合は、データベースによってエラーが戻され、emp_mgmt
は無効なままになります。
また、データベースによって、emp_mgmt
に依存するオブジェクトもすべて無効にされます。その後、最初に明示的に再コンパイルせずにこれらのオブジェクトのいずれかを参照すると、データベースによって実行時にそのオブジェクトが暗黙的に再コンパイルされます。
スキーマhr
内のemp_mgmt
パッケージの本体を再コンパイルするには、次の文を発行します。
ALTER PACKAGE hr.emp_mgmt COMPILE BODY;
パッケージ本体の再コンパイル中にデータベースでコンパイル・エラーが発生しなかった場合、本体は有効になります。その後、ユーザーhr
は、emp_mgmt
の仕様部で宣言されたすべてのパッケージ・オブジェクトを実行時に再コンパイルせずに起動または参照できます。本体の再コンパイル時にコンパイル・エラーが発生した場合は、データベースによってエラー・メッセージが戻され、本体は無効なままになります。
この文はemp_mgmt
の仕様部ではなく本体を再コンパイルするため、依存オブジェクトはデータベースによって無効にされません。