CREATE PACKAGE文は、ストアド・パッケージの仕様部を作成するか、または置き換えます。ストアド・パッケージとは、データベースにまとめて格納される関連するプロシージャやファンクションなどのプログラム・オブジェクトをカプセル化したコレクションです。 パッケージ仕様部で、これらのオブジェクトを宣言します。 その後に指定するパッケージ本体で、これらのオブジェクトを定義します。
前提条件
自身のスキーマ内にパッケージを作成するか、または自身のスキーマ内のパッケージを置き換えるには、CREATE PROCEDUREシステム権限が必要です。 別のユーザーのスキーマ内にパッケージを作成するか、または別のユーザーのスキーマ内のパッケージを置き換えるには、CREATE ANY PROCEDUREシステム権限が必要です。
CREATE PACKAGE文をデータベースのプリコンパイラ・プログラム内に埋め込むには、キーワードEND-EXECの後に特定の言語の埋込みSQL文の終了記号を付けて文を終了する必要があります。
構文
create_package ::=

(invoker_rights_clause ::=、item_list_1 ::=)

キーワードとパラメータの説明
OR REPLACEを指定すると、パッケージ仕様部がすでに存在する場合に再作成できます。 この句を使用すると、既存のパッケージに以前に付与されたオブジェクト権限を削除、再作成および再付与しなくても、そのパッケージの仕様部を変更できます。 パッケージ仕様部を変更すると、パッケージ仕様部はデータベースによって再コンパイルされます。
再定義されたパッケージに対する権限を以前に付与されているユーザーは、権限を再付与される必要なく、パッケージにアクセスできます。
ファンクション索引がパッケージに依存している場合は、データベースによって索引にDISABLEDのマークが付けられます。
schema
パッケージを含めるスキーマを指定します。 schemaを省略すると、データベースによってユーザー自身のスキーマにパッケージが作成されます。
item_list_1
パッケージ要素を宣言します。 item_list_1の項目がプラグマの場合、これは次のいずれかである必要があります。
package_name
データベースに格納されたパッケージを識別します。 ネーミング規則は、「識別子」を参照してください。
メンバー・ファンクションのAUTHIDプロパティおよびオブジェクト型のプロシージャを指定します。 AUTHIDプロパティの詳細は、「実行者権限または定義者権限の使用(AUTHID句)」を参照してください。
CURRENT_USERを指定すると、CURRENT_USERの権限でパッケージを実行できます。 この句は実行者権限パッケージを作成します。
また、この句は、問合せ、DML操作および動的SQL文の外部名がCURRENT_USERのスキーマで解決されるように指定します。 その他すべての文に含まれる外部名は、このパッケージが存在するスキーマで解決されます。
AUTHID DEFINER
DEFINERを指定すると、パッケージが存在するスキーマの所有者の権限でパッケージを実行し、パッケージが存在するスキーマでその外部名を解決することができます。 これがデフォルトです。これによって、定義者権限パッケージが作成されます。
item_list_1
項目のリストを宣言します。 構文は、「ブロック」を参照してください。
item_list_1の項目がプラグマの場合、これは次のいずれかである必要があります。
例
パッケージの作成: 例 次の文は、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文」を参照してください。
関連トピック