ヘッダーをスキップ
Oracle Database PL/SQL言語リファレンス
11g リリース1(11.1)
E05670-03
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

CREATE PACKAGE文

CREATE PACKAGE文は、ストアド・パッケージの仕様部を作成するか、または置き換えます。ストアド・パッケージとは、データベースにまとめて格納される関連するプロシージャやファンクションなどのプログラム・オブジェクトをカプセル化したコレクションです。 パッケージ仕様部で、これらのオブジェクトを宣言します。 その後に指定するパッケージ本体で、これらのオブジェクトを定義します。

前提条件

自身のスキーマ内にパッケージを作成するか、または自身のスキーマ内のパッケージを置き換えるには、CREATE PROCEDUREシステム権限が必要です。 別のユーザーのスキーマ内にパッケージを作成するか、または別のユーザーのスキーマ内のパッケージを置き換えるには、CREATE ANY PROCEDUREシステム権限が必要です。

CREATE PACKAGE文をデータベースのプリコンパイラ・プログラム内に埋め込むには、キーワードEND-EXECの後に特定の言語の埋込みSQL文の終了記号を付けて文を終了する必要があります。

構文

create_package ::=

create_package
create_package.gifの説明

invoker_rights_clause ::=item_list_1 ::=

invoker_rights_clause ::=

invoker_rights_clause
invoker_rights_clause.gifの説明

キーワードとパラメータの説明

OR REPLACE

OR REPLACEを指定すると、パッケージ仕様部がすでに存在する場合に再作成できます。 この句を使用すると、既存のパッケージに以前に付与されたオブジェクト権限を削除、再作成および再付与しなくても、そのパッケージの仕様部を変更できます。 パッケージ仕様部を変更すると、パッケージ仕様部はデータベースによって再コンパイルされます。

再定義されたパッケージに対する権限を以前に付与されているユーザーは、権限を再付与される必要なく、パッケージにアクセスできます。

ファンクション索引がパッケージに依存している場合は、データベースによって索引にDISABLEDのマークが付けられます。

schema

パッケージを含めるスキーマを指定します。 schemaを省略すると、データベースによってユーザー自身のスキーマにパッケージが作成されます。

item_list_1

パッケージ要素を宣言します。 item_list_1の項目がプラグマの場合、これは次のいずれかである必要があります。

package_name

データベースに格納されたパッケージを識別します。 ネーミング規則は、「識別子」を参照してください。

invoker_rights_clause

メンバー・ファンクションのAUTHIDプロパティおよびオブジェクト型のプロシージャを指定します。 AUTHIDプロパティの詳細は、「実行者権限または定義者権限の使用(AUTHID句)」を参照してください。

AUTHID CURRENT_USER

CURRENT_USERを指定すると、CURRENT_USERの権限でパッケージを実行できます。 この句は実行者権限パッケージを作成します。

また、この句は、問合せ、DML操作および動的SQL文の外部名がCURRENT_USERのスキーマで解決されるように指定します。 その他すべての文に含まれる外部名は、このパッケージが存在するスキーマで解決されます。

AUTHID DEFINER

DEFINERを指定すると、パッケージが存在するスキーマの所有者の権限でパッケージを実行し、パッケージが存在するスキーマでその外部名を解決することができます。 これがデフォルトです。これによって、定義者権限パッケージが作成されます。


参照:

実行者権限および定義者権限の詳細は、「実行者権限または定義者権限の使用(AUTHID句)」を参照してください。

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パッケージの仕様部では、次のようなパブリック・プログラム・オブジェクトを宣言します。

パッケージにアクセスできるユーザーは、これらすべてのオブジェクトを使用できます。 パッケージの作成後、これらのパブリック・プロシージャまたはパブリック・ファンクションのいずれかをコールしたり、パッケージの任意のパブリック例外を呼び出すアプリケーションを開発できます。

このパッケージのプロシージャおよびファンクションをコールするには、これらのプロシージャおよびファンクションをパッケージ本体で定義しておく必要があります。 emp_mgmtパッケージの本体を作成するCREATE PACKAGE BODY文の例は、「CREATE PACKAGE BODY文」を参照してください。

関連トピック