CREATE PACKAGE文は、データベースに1つの単位として格納される、関連するプロシージャやファンクション、その他のプログラム・オブジェクトをカプセル化したコレクションである、ストアド・パッケージの仕様部を作成するか、または置き換えます。パッケージ仕様部では、これらのオブジェクトを宣言します。その後に指定するパッケージ本体で、これらのオブジェクトを定義します。
ここでのトピック
前提条件
自分のスキーマ内にパッケージを作成するか、または自分のスキーマ内のパッケージを置き換えるには、CREATE PROCEDUREシステム権限が必要です。別のユーザーのスキーマ内にパッケージを作成するか、または別のユーザーのスキーマ内のパッケージを置き換えるには、CREATE ANY PROCEDUREシステム権限が必要です。
CREATE PACKAGE文をデータベースのプリコンパイラ・プログラム内に埋め込むには、キーワードEND-EXECの後に特定の言語の埋込みSQL文の終了記号を付けて文を終了する必要があります。
構文
create_package ::=
plsql_package_source ::=
参照:
invoker_rights_clause ::=
セマンティクス
OR REPLACE
パッケージが存在する場合は、パッケージを再作成し、再コンパイルします。
再定義する前のパッケージに対する権限を付与されていたユーザーは、権限を再付与される必要なく、パッケージにアクセスできます。
ファンクション索引がパッケージに依存している場合は、データベースによって索引にDISABLEDのマークが付けられます。
[ EDITIONABLE | NONEDITIONABLE ]
schemaでスキーマ・オブジェクト・タイプPACKAGEに対してエディションが有効になっている場合に、パッケージがエディション・オブジェクトまたは非エディション・オブジェクトのどちらになるかを指定します。デフォルト: EDITIONABLE。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。
schema
パッケージが含まれているスキーマの名前。デフォルト: 自分のスキーマ。
package_name
データベースに格納されたパッケージを識別します。ネーミング規則については、「Identifiers」を参照してください。
invoker_rights_clause
パッケージのファンクションとパッケージおよびパッケージ仕様部で宣言された明示カーソルのAUTHIDプロパティを指定します。AUTHIDプロパティの詳細は、「実行者権限および定義者権限(AUTHIDプロパティ)」を参照してください。
accessible_by_clause
パッケージに対する動作は、ファンクションに対する動作と同様です。CREATE FUNCTIONの「accessible_by_clause」を参照してください。
item_list_1
パッケージ内のすべてのタイプを定義し、パッケージ内のすべてのカーソルとサブプログラムを宣言します。すべての宣言には、対応する定義がパッケージ本体で必要です。対応する宣言と定義のヘッダーは、空白以外の一語一語が一致している必要があります。
item_list_1の制限
PRAGMA AUTONOMOUS_TRANSACTIONは、ここには記述できません。
例
例14-16 emp_mgmtパッケージの仕様部の作成
この文は、emp_mgmtパッケージの仕様を作成します。
CREATE OR REPLACE PACKAGE emp_mgmt AS
FUNCTION hire (last_name VARCHAR2, job_id VARCHAR2,
manager_id NUMBER, salary NUMBER,
commission_pct NUMBER, department_id NUMBER)
RETURN NUMBER;
FUNCTION create_dept(department_id NUMBER, location_id NUMBER)
RETURN NUMBER;
PROCEDURE remove_emp(employee_id NUMBER);
PROCEDURE remove_dept(department_id NUMBER);
PROCEDURE increase_sal(employee_id NUMBER, salary_incr NUMBER);
PROCEDURE increase_comm(employee_id NUMBER, comm_incr NUMBER);
no_comm EXCEPTION;
no_sal EXCEPTION;
END emp_mgmt;
/
emp_mgmtパッケージの仕様部では、次のようなパブリック・プログラム・オブジェクトを宣言します。
ファンクションhireおよびcreate_dept
プロシージャremove_emp、remove_dept、increase_salおよびincrease_comm
例外no_commおよびno_sal
パッケージにアクセスできるユーザーは、これらすべてのオブジェクトを使用できます。パッケージの作成後、これらのパブリック・プロシージャまたはパブリック・ファンクションのいずれかを起動したり、パッケージの任意のパブリック例外を呼び出すアプリケーションを開発できます。
このパッケージのプロシージャおよびファンクションを起動するには、これらのプロシージャおよびファンクションをパッケージ本体で定義しておく必要があります。emp_mgmtパッケージの本体を作成するCREATE PACKAGE BODY文の例は、「CREATE PACKAGE BODY文」を参照してください。