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 の仕様ではなく本体を再コンパイルするため、データベースは依存するオブジェクトを無効にしません。