14.9 CREATE PACKAGE文

CREATE PACKAGE文は、データベースに1つの単位として格納される、関連するプロシージャやファンクション、その他のプログラム・オブジェクトをカプセル化したコレクションである、ストアド・パッケージの仕様部を作成するか、または置き換えます。

パッケージ仕様部でこれらのオブジェクトを宣言します。その後に指定するパッケージ本体で、これらのオブジェクトを定義します。

ここでのトピック

前提条件

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

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

構文

create_package ::=

セマンティクス

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_empremove_deptincrease_salおよびincrease_comm

  • 例外no_commおよびno_sal

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

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