ヘッダーをスキップ
Oracle Database PL/SQL言語リファレンス
11g リリース1(11.1)
E05670-03
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

ALTER PACKAGE文

ALTER PACKAGE文は、パッケージの仕様部、本体、またはその両方を明示的に再コンパイルします。 明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、また、実行時のコンパイル・エラーとパフォーマンス上のオーバーヘッドもなくなります。

パッケージ内のすべてのオブジェクトは1つの単位として格納されるため、ALTER PACKAGE文によって、すべてのパッケージ・オブジェクトがまとめて再コンパイルされます。 ALTER PROCEDURE文またはALTER FUNCTION文を使用して、パッケージの一部であるプロシージャまたはファンクションを個別に再コンパイルすることはできません。


注意:

この文では、既存のパッケージの宣言または定義は変更されません。 パッケージを再宣言または再定義するには、CREATE PACKAGE文を使用するか、またはCREATE PACKAGE BODY文OR REPLACE句とともに使用します。

前提条件

パッケージを変更するには、パッケージが自身のスキーマ内にある必要があります。自身のスキーマ内にない場合は、ALTER ANY PROCEDUREシステム権限が必要です。

構文

alter_package::=

alter_package
alter_package.gifの説明

compiler_parameters_clause::=

compiler_parameters_clause
compiler_parameters_clause.gifの説明

キーワードとパラメータの説明

schema

パッケージが含まれているスキーマを指定します。 schemaを省略すると、パッケージは自身のスキーマ内に存在するとみなされます。

package

再コンパイルするパッケージの名前を指定します。

COMPILE

パッケージの仕様部または本体を再コンパイルするには、COMPILEを指定する必要があります。 COMPILEキーワードは必須です。

再コンパイル中、コンパイラの永続的なスイッチ設定はすべて削除され、セッションから再度取得されてコンパイルの最後に格納されます。 この処理を回避するには、REUSE SETTINGS句を指定します。

パッケージの再コンパイル時にコンパイル・エラーが発生した場合は、データベースによってエラーが戻され、本体は無効なままになります。 関連付けられているコンパイラ・エラー・メッセージは、SQL*PlusコマンドSHOW ERRORSを使用して確認できます。

SPECIFICATION

SPECIFICATIONを指定すると、無効かどうかに関係なくパッケージ仕様部のみを再コンパイルすることができます。 仕様部を変更した後、パッケージ仕様部を再コンパイルしてコンパイル・エラーを確認できます。

パッケージ仕様部を再コンパイルすると、仕様部に依存するローカル・オブジェクト(パッケージ内のプロシージャまたはファンクションをコールするプロシージャなど)がデータベースによって無効にされます。 パッケージの本体も仕様部に依存します。 その後、最初に明示的に再コンパイルせずにこれらの依存オブジェクトのいずれかを参照すると、データベースによって実行時にそのオブジェクトが暗黙的に再コンパイルされます。

BODY

BODYを指定すると、無効かどうかに関係なくパッケージ本体のみを再コンパイルすることができます。 パッケージ本体は、変更した後に再コンパイルできます。 パッケージ本体を再コンパイルしても、パッケージ仕様部に依存するオブジェクトは無効になりません。

パッケージ本体の再コンパイル時にその本体が依存するオブジェクトのいずれかが無効な場合は、データベースによってそれらのオブジェクトが最初に再コンパイルされます。 本体は、データベースによって正常に再コンパイルされた場合に有効になります。

PACKAGE

PACKAGEを指定すると、無効かどうかに関係なくパッケージ仕様部とパッケージ本体(存在する場合)の両方を再コンパイルすることができます。 これはデフォルトです。 パッケージ仕様部および本体を再コンパイルした場合、SPECIFICATIONおよびBODYで説明されているように、依存オブジェクトの無効化および再コンパイルが行われます。

DEBUG

DEBUGを指定すると、PL/SQLデバッガで使用するためのコードを生成して格納するようにPL/SQLコンパイラに指示できます。 この句を指定した場合の効果は、compiler_parameters_clausePLSQL_DEBUG = TRUEを指定した場合と同じです。


参照:

パッケージのデバッグの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

compiler_parameters_clause

この句のパッケージに対する動作は、ファンクションに対する動作と同様です。 詳細は、「ALTER FUNCTION」の「compiler_parameters_clause」を参照してください。

REUSE SETTINGS

この句のパッケージに対する動作は、ファンクションに対する動作と同様です。 詳細は、「ALTER FUNCTION」「REUSE SETTINGS」を参照してください。

パッケージの再コンパイル: 例 次の文は、hr.emp_mgmtパッケージの仕様部および本体を明示的に再コンパイルします。 このパッケージを作成する例については、「パッケージの作成: 例」を参照してください。

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の仕様部ではなく本体を再コンパイルするため、依存オブジェクトはデータベースによって無効にされません。

関連トピック