CREATE PACKAGE パッケージ仕様部を作成するSQL

CREATE PACKAGEとは、パッケージの仕様部を作成するSQL文である。パッケージには仕様部と本体部の2つがあり、パッケージを作成するには、両方を作成する必要がある。パッケージ本体部はCREATE PACKAGE BODYで作成する。

パッケージ仕様部とは

Oracleデータベースのパッケージは、仕様部と本体部の2つから構成されている。

パッケージ仕様部は、パッケージを呼び出して利用する側に対して、このパッケージにはどのようなプロシージャやファンクションがあるかを定義したものである。具体的には、プロシージャやファンクションの一覧、それぞれの引数や戻り値が定義されている。

CREATE PACKAGEの構文

新たにパッケージ仕様部を作成する。

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];
schema

パッケージを作成するスキーマの名前を指定する。自分のスキーマにパッケージを作成する場合は、スキーマ名の指定を省略できる。

package

作成するパッケージの名前を指定する。END句のパッケージ名は省略できる。

AUTHID CURRENT_USER

パッケージを実行したユーザの権限で動作させる。

AUTHID DEFINER

パッケージを作成したユーザの権限で動作させる。

プロシージャ及びファンクションの定義

プロシージャ

PROCEDURE name([param [,param...]]);

ファンクション

FUNCTION name([param [,param...]]) RETURN type;
name

プロシージャまたはファンクションの名前を指定する。

type

ファンクションの戻り値のデータ型を指定する。

param
引数を次の構文で指定する。
var {IN|OUT|IN OUT} type [DEFAULT expr]
var

引数の名前を指定する。

IN

入力パラメータ

OUT

出力パラメータ

IN OUT

入出力パラメータ

type

引数のデータ型を指定する。

expr

入力パラメータのデフォルト値を指定する。

CREATE PACKAGEに必要な権限

自分のスキーマにパッケージ仕様部を作成するには、CREATE PROCEDUREシステム権限が必要である。任意のスキーマにパッケージ仕様部を作成するには、CREATE ANY PROCEDUREシステム権限が必要である。

CREATE PACKAGEの使用例

パッケージ仕様部を作成する例を次に示す。

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コマンドを実行すると、コンパイル・エラーの内容が表示される。

関連SQL