プライマリ・コンテンツに移動
Oracle Database PL/SQL言語リファレンス
12c リリース1 (12.1)
B71296-06
目次へ移動
目次
索引へ移動
索引

前
次

ALTER FUNCTION文

ALTER FUNCTION文は、スタンドアロン・ファンクションを明示的に再コンパイルします。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、関連する実行時コンパイル・エラーおよびパフォーマンス・オーバーヘッドが発生しなくなります。

注意:

この文では、既存のファンクションの宣言または定義は変更されません。スタンドアロン・ファンクションを再宣言または再定義するには、「CREATE FUNCTION文」OR REPLACE句とともに使用します。

ここでのトピック

前提条件

ファンクションがSYSスキーマ内にある場合、SYSDBAとして接続する必要があります。そうでない場合は、ファンクションが自分のスキーマ内にあるか、ALTER ANY PROCEDUREシステム権限が必要です。

構文

function_compile_clause ::=

compiler_parameters_clause::=

セマンティクス

schema

ファンクションが含まれているスキーマの名前。デフォルト: 自分のスキーマ。

function_name

再コンパイルするファンクションの名前。

COMPILE

有効か無効かに関係なくファンクションが再コンパイルされます。

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

また、データベースによって、ファンクションに依存するローカル・オブジェクト(再コンパイルされたファンクションを起動するサブプログラム、再コンパイルされたファンクションを起動するサブプログラムを定義するパッケージ本体など)も無効にされます。

ファンクションは、データベースによって正常に再コンパイルされた場合に有効になります。それ以外の場合は、データベースによってエラーが戻され、ファンクションは無効なままになります。

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

DEBUG

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

REUSE SETTINGS

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

compiler_parameters_clause

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

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

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

{ EDITIONABLE | NONEDITIONABLE }

schemaでスキーマ・オブジェクト・タイプFUNCTIONに対して後からエディションが有効化された場合に、ファンクションがエディション・オブジェクトまたは非エディション・オブジェクトのどちらになるかを指定します。デフォルト: EDITIONABLE。エディション・オブジェクトと非エディション・オブジェクトの変更の詳細は、『Oracle Database開発ガイド』を参照してください。

ファンクションの再コンパイル: 例

サンプル・ユーザーoeが所有しているファンクションget_balを明示的に再コンパイルするには、次の文を発行します。

ALTER FUNCTION oe.get_bal COMPILE;

get_balの再コンパイル中にデータベースでコンパイル・エラーが発生しなかった場合、get_balは有効になります。その後、実行時にデータベースによって再コンパイルされることなく、実行できます。get_balの再コンパイル時にコンパイル・エラーが発生した場合は、データベースによってエラーが戻され、get_balは無効なままになります。

また、データベースによって、get_balに依存するオブジェクトもすべて無効にされます。その後、最初に明示的に再コンパイルせずにこれらのオブジェクトのいずれかを参照すると、データベースによって実行時にそのオブジェクトが暗黙的に再コンパイルされます。