CREATE PACKAGEとは、パッケージの仕様部を作成するSQL文である。パッケージには仕様部と本体部の2つがあり、パッケージを作成するには、両方を作成する必要がある。パッケージ本体部はCREATE PACKAGE BODYで作成する。
Oracleデータベースのパッケージは、仕様部と本体部の2つから構成されている。
パッケージ仕様部は、パッケージを呼び出して利用する側に対して、このパッケージにはどのようなプロシージャやファンクションがあるかを定義したものである。具体的には、プロシージャやファンクションの一覧、それぞれの引数や戻り値が定義されている。
新たにパッケージ仕様部を作成する。
CREATE PACKAGE [schema.]package [AUTHID {CURRENT_USER|DEFINER}] {IS|AS}
-- プロシージャやファンクションの定義
END [package];
既存のパッケージ仕様部を置き換える。
CREATE OR REPLACE PACKAGE [schema.]package [AUTHID {CURRENT_USER|DEFINER}] {IS|AS}
-- プロシージャやファンクションの定義
END [package];
パッケージを作成するスキーマの名前を指定する。自分のスキーマにパッケージを作成する場合は、スキーマ名の指定を省略できる。
作成するパッケージの名前を指定する。END句のパッケージ名は省略できる。
パッケージを実行したユーザの権限で動作させる。
パッケージを作成したユーザの権限で動作させる。
プロシージャ
PROCEDURE name([param [,param...]]);
ファンクション
FUNCTION name([param [,param...]]) RETURN type;
プロシージャまたはファンクションの名前を指定する。
ファンクションの戻り値のデータ型を指定する。
var {IN|OUT|IN OUT} type [DEFAULT expr]
引数の名前を指定する。
入力パラメータ
出力パラメータ
入出力パラメータ
引数のデータ型を指定する。
入力パラメータのデフォルト値を指定する。
自分のスキーマにパッケージ仕様部を作成するには、CREATE PROCEDUREシステム権限が必要である。任意のスキーマにパッケージ仕様部を作成するには、CREATE ANY PROCEDUREシステム権限が必要である。
パッケージ仕様部を作成する例を次に示す。
CREATE OR REPLACE PACKAGE emp_utl IS
PROCEDURE set_ename(
empno IN NUMBER,
ename IN VARCHAR
);
FUNCTION get_ename(empno IN NUMBER) RETURN VARCHAR;
END;
実際にパッケージを作成するには、仕様部のほかにも本体部を作る必要がある。
CREATE PACKAGE my_package IS
PROCEDURE put_log (level IN NUMBER, message IN VARCHAR2);
END;
/
CREATE PACKAGE BODY my_package IS
PROCUDURE put_log (
level IN NUMBER,
message IN VARCHAR2
) IS
END put_log;
END my_package;
/
「警告: パッケージが作成されましたが、コンパイル・エラーがあります。」と表示された場合は、SQL*PlusのSHOW ERRORSコマンドを実行すると、コンパイル・エラーの内容が表示される。