14.9 CREATE PACKAGE文
CREATE
PACKAGE
文は、データベースに1つの単位として格納される、関連するプロシージャやファンクション、その他のプログラム・オブジェクトをカプセル化したコレクションである、ストアド・パッケージの仕様部を作成するか、または置き換えます。
パッケージ仕様部でこれらのオブジェクトを宣言します。その後に指定するパッケージ本体で、これらのオブジェクトを定義します。
ここでのトピック
前提条件
自分のスキーマ内にパッケージを作成するか、または自分のスキーマ内のパッケージを置き換えるには、CREATE
PROCEDURE
システム権限が必要です。他のユーザーのスキーマ内にパッケージを作成または再作成する場合は、CREATE
ANY
PROCEDURE
システム権限が必要です。
Oracleデータベースのプリコンパイラ・プログラム内にCREATE
PACKAGE
文を埋め込む場合は、キーワードEND-EXEC
に続けて、各言語の埋込みSQL文の終了記号を記述して文を終了する必要があります。
構文
create_package ::=
plsql_package_source ::=
(sharing_clause ::=、default_collation_clause ::=、invoker_rights_clause ::=、accessible_by_clause ::=、item_list_1 ::=)
item_list_1 ::=
(cursor_declaration ::=、item_declaration ::=、type_definition ::=)
セマンティクス
create_package
OR REPLACE
パッケージが存在する場合は、パッケージを再作成し、再コンパイルします。
再定義する前のパッケージに対する権限を付与されていたユーザーは、権限を再付与される必要なく、パッケージにアクセスできます。
ファンクション索引がパッケージに依存している場合、索引にDISABLED
のマークが付きます。
[ EDITIONABLE | NONEDITIONABLE ]
schema
でスキーマ・オブジェクト・タイプPACKAGE
に対してエディションが有効になっている場合に、パッケージがエディション・オブジェクトまたは非エディション・オブジェクトのどちらになるかを指定します。デフォルト: EDITIONABLE
。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。
plsql_package_source
schema
パッケージが含まれているスキーマの名前。デフォルト: 自分のスキーマ。
package_name
データベースに格納されたパッケージを識別します。ネーミング規則については、「Identifiers」を参照してください。
item_list_1
パッケージ内のすべてのタイプを定義し、パッケージ内のすべてのカーソルとサブプログラムを宣言します。すべての宣言には、対応する定義がパッケージ本体で必要です。対応する宣言と定義のヘッダーは、空白以外の一語一語が一致している必要があります。
item_list_1の制限
PRAGMA
AUTONOMOUS_TRANSACTION
は、ここには記述できません。
例
例14-19 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文」を参照してください。