13.13 COMPILE句

COMPILE句は、無効になったストアド・ユニットを明示的に再コンパイルすることで、実行時の暗黙的な再コンパイルの必要をなくして、実行時コンパイル・エラーとパフォーマンスのオーバーヘッドを回避するために使用します。

構文

compile_clause ::=

compiler_parameters_clause ::=

セマンティクス

compile_clause

COMPILE

有効か無効かに関係なく、PL/SQLユニットが再コンパイルされます。PL/SQLユニットは、ライブラリ、パッケージ、パッケージ仕様部、パッケージ本体、トリガー、プロシージャ、ファンクション、型、型仕様部または型本体のいずれかになります。

まず、ユニットが依存するいずれかのオブジェクトが無効の場合は、そのオブジェクトがデータベースによって再コンパイルされます。

また、そのユニットに依存するすべてのローカル・オブジェクトがデータベースによって無効にされます。

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

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

DEBUG

PLSQL_OPTIMIZE_LEVEL=1と同じ効果があり、PL/SQLデバッガで使用するためのコードを生成して格納するようにPL/SQLコンパイラに指示します。DEBUGではなく、PLSQL_OPTIMIZE_LEVEL=1を使用することをお薦めします。

PACKAGE

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

PACKAGEの制限事項

PACKAGEは、パッケージをコンパイルする場合にのみ使用できます。

SPECIFICATION

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

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

SPECIFICATIONの制限事項

SPECIFICATIONは、パッケージ仕様部または型仕様部をコンパイルする場合にのみ使用できます。

BODY

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

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

BODYの制限事項

BODYは、パッケージ本体または型本体をコンパイルする場合にのみ使用できます。

REUSE SETTINGS

Oracle Databaseによってコンパイラ・スイッチ設定が削除および再取得されないようにします。この句を指定すると、Oracleによって既存の設定が保持され、この文の他の場所に値が指定されていないパラメータの再コンパイルにその設定が使用されます。

DEFAULT COLLATION句のコンパイル・セマンティクスも参照してください。

compiler_parameters_clause

表1-2に示されているPL/SQLコンパイル・パラメータの値を指定します。これらの各パラメータのコンパイル時の値は、コンパイルされるPL/SQLユニットのメタデータとともに格納されます。

各パラメータは、それぞれの文で1回のみ指定できます。各設定は、コンパイルされているPL/SQLユニットに対してのみ有効であり、このセッションまたはシステムの他のコンパイルには影響しません。セッションまたはシステム全体に影響を与えるには、ALTER SESSIONまたはALTER SYSTEM文を使用してパラメータの値を設定する必要があります。

この句からいずれかのパラメータを省略してREUSE SETTINGSを指定した場合に、このPL/SQLユニットの以前のコンパイルでそのパラメータの値が指定されていると、データベースによって以前の値が使用されます。いずれかのパラメータを省略した場合に、REUSE SETTINGSを指定しないか、または以前のコンパイルでそのパラメータの値が指定されていないと、データベースによってセッション環境からそのパラメータの値が取得されます。

関連トピック

その他のドキュメント: