ALTER PACKAGE ステートメントは、パッケージヘッダーおよび(または)本体を明示的に再コンパイルするために使用します。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
パッケージ内のすべてのオブジェクトは単一のユニットとして格納されるため、ALTER PACKAGE ステートメントはすべてのパッケージオブジェクトを再コンパイルします。ALTER PROCEDURE ステートメントや ALTER FUNCTION ステートメントを使用して、パッケージの一部であるストアドプロシージャや関数を個別に再コンパイルすることはできません。
前提条件
パッケージが SYS スキーマにある場合は、SYSDBA 権限で接続する必要があります。それ以外の場合、そのパッケージは現在のユーザーのスキーマに存在するか、ユーザーは ALTER ANY PROCEDURE システム権限を持っている必要があります。
構文
alter_package の構文は以下のとおりです:
ALTER PACKAGE [ schema. ] package_name
{ package_compile_clause} ;
ここで、package_compile_clause の構文は以下のとおりです:
COMPILE [ DEBUG ] [ compiler_parameters_clause ... ] [ REUSE SETTINGS ]
セマンティクス
構文 |
キーワードまたは構文ノード |
説明 |
|---|---|---|
| alter_package | schema | このパッケージが存在するスキーマ名。デフォルト値は現在のユーザーのスキーマ。 |
| alter_package | package_name | 再コンパイルするパッケージの名前。 |
| package_compile_clause | -- | パッケージヘッダーおよび(または)本体を再コンパイルします。 |
例
以下の例は、sys.obdemo_pack パッケージのスペциフィケーションと本体を明示的に再コンパイルする規範です。
ALTER PACKAGE obdemo_pack COMPILE PACKAGE;
データベースが obdemo_pack のスペциフィケーションと本体を再コンパイルする際にコンパイルエラーが発生しない場合、obdemo_pack は有効になります。その後、ユーザー sys は obdemo_pack のスペциフィケーションで宣言されたすべてのパッケージオブジェクトを呼び出したり参照したりでき、ランタイムでの再コンパイルは不要です。
obdemo_pack を再コンパイルした際にコンパイルエラーが発生した場合、データベースはエラーを返し、obdemo_pack は無効となります。また、データベースは obdemo_pack に依存するすべてのオブジェクトも無効にします。その後、これらのオブジェクトを明示的に再コンパイルせずに参照した場合、データベースは実行時に暗黙的に再コンパイルを行います。
以下の例は、SYS スキーマでパッケージ本体を再コンパイルする方法です:
ALTER PACKAGE sys.obdemo_pack COMPILE BODY;
データベースが obdemo_pack パッケージ本体の再コンパイル中にコンパイルエラーに遭遇しなかった場合、パッケージ本体は有効になります。その後、ユーザー sys は obdemo_pack スペックに宣言されているすべてのパッケージオブジェクトを呼び出したり参照したりでき、実行時の再コンパイルは不要です。
本体の再コンパイルによってコンパイルエラーが発生した場合、データベースはエラーメッセージを返し、本体は引き続き無効のままです。
このステートメントは obdemo_pack のスペックではなく本体を再コンパイルするため、データベースは依存オブジェクトを無効にしません。