13.13 COMPILE句
COMPILE句は、無効になったストアド・ユニットを明示的に再コンパイルすることで、実行時の暗黙的な再コンパイルの必要をなくして、実行時コンパイル・エラーとパフォーマンスのオーバーヘッドを回避するために使用します。
COMPILE
句は、次のSQL文に指定できます。
構文
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
を指定しないか、または以前のコンパイルでそのパラメータの値が指定されていないと、データベースによってセッション環境からそのパラメータの値が取得されます。
関連トピック
その他のドキュメント:
-
プロシージャのデバッグの詳細は、『Oracle Database開発ガイド』を参照してください。
-
ストアド・サブプログラムで使用可能な機能と同じ機能を使用したトリガーのデバッグの詳細は、『Oracle Database開発ガイド』を参照してください。