日本語PDF

14.4 ALTER PROCEDURE文

ALTER PROCEDURE文は、スタンドアロン・プロシージャを明示的に再コンパイルします。

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

パッケージの一部であるプロシージャを再コンパイルするには、「ALTER PACKAGE文」を使用してパッケージ全体を再コンパイルします。

ノート:

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

ALTER PROCEDURE文は、ALTER FUNCTION文に非常に似ています。詳細は、「ALTER FUNCTION文」を参照してください。

ここでのトピック

前提条件

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

構文

alter_procedure ::=

セマンティクス

alter_procedure

schema

プロシージャが含まれているスキーマの名前。デフォルト: 自分のスキーマ。

procedure_name

再コンパイルするプロシージャの名前。

{ EDITIONABLE | NONEDITIONABLE }

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

procedure_compile_clause

compile_clauseおよびcompiler_parameters_clauseのセマンティクスを参照してください。

例14-4 プロシージャの再コンパイル

ユーザーhrが所有しているプロシージャremove_empを明示的に再コンパイルするには、次の文を発行します。

ALTER PROCEDURE hr.remove_emp COMPILE;

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

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