ORACLE/PACKAGE編

オラクルちょこっとリファレンス

HOME > PACKAGE編

PACKAGE(パッケージ)

パッケージとは、FUNCTIONやPROCEDUREをひとまとめにしたものです。大規模なシステムになるとFUNCTIONやPROCEDUREの数だけでもかなりの数になり、1つづつ作成していてはとても管理しきれなくなります。

そうした時に関連性のあるFUNCTIONやPROCEDUREをひとまとめにしてPACKAGEにすると非常に分かりやすくなり、管理もしやすくなります。

パッケージの作成

パッケージは仕様部と本体部の2つのオブジェクトからなります。仕様部を作成するには「CREATE PACKAGE」文、本体部を作成するには「CREATE PACKAGE BODY」文を使用します。

仕様部にはパッケージに含まれるファンクションとプロシージャの名前と引数、戻り値のみを定義したものです。

本体部はパッケージに含まれるファンクションとプロシージャの実際の処理と、パッケージ内のどこからでもアクセスできるグローバル変数を記述します。

CREATE PACKAGE構文
CREATE [OR REPLACE] PACKAGE パッケージ名 AS

  --ファンクションの場合
  FUNCTION ファンクション名(引数 IN 型 [, ...]) RETURN 戻り値型; ...

  --プロシージャの場合
  PROCEDURE プロシージャ名(引数 IN 型 [, ...]); ...

END;
/

CREATE PACKAGE BODY構文
CREATE [OR REPLACE] PACKAGE BODY パッケージ名 AS

  --グローバル変数
    変数名 型; ...

  --ファンクションの場合
  FUNCTION ファンクション名(引数 IN 型 [, ...]) RETURN 戻り値型;
    IS
      宣言部
    BEGIN
      処理部
      RETURN 戻り値;
    EXCEPTION
      例外部
    END ファンクション名;

  --プロシージャの場合
  PROCEDURE プロシージャ名(引数 IN 型 [, ...]);
    IS
      宣言部
    BEGIN
      処理部
    EXCEPTION
      例外部
    END プロシージャ名;

END パッケージ名;
/

パラメータ 説明
OR REPLACE 既存のパッケージを置き換える(更新)時に指定する
宣言部 PL/SQL(宣言部)編をご覧ください。
処理部 PL/SQL(実行部)編をご覧ください。
例外部 PL/SQL(例外部)編をご覧ください。
CREATE PACKAGE例文
--(例)CREATE PACKAGE文の例 CREATE OR REPLACE PACKAGE pkg_test AS --ファンクション FUNCTION f_kake ( a IN NUMBER, b IN NUMBER ) RETURN NUMBER; --プロシージャ PROCEDURE f_con ( str1 IN VARCHAR, str2 IN VARCHAR ); END; /
CREATE PACKAGE BODY例文
--(例)CREATE PACKAGE BODY文の例 CREATE OR REPLACE PACKAGE BODY pkg_test AS var VARCHAR2(50); --ファンクション FUNCTION f_kake(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS d NUMBER; BEGIN d := a * b; RETURN d; END f_kake; --プロシージャ PROCEDURE f_con(str1 IN VARCHAR, str2 IN VARCHAR) IS BEGIN var := str1 || str2; END f_con; END pkg_test; /

注意点

  • 仕様部と本体部の名前は同じにする。
  • 仕様部を先に作成してから本体部を作成する。
    (仕様部を先に作成しておかないと、本体部を作成したときにエラーになります)
  • パッケージ名、プロシージャ名/ファンクション名、引数、戻り値は仕様部と本体部で
    整合性を取ること。(取れていないとエラーになります。)

パッケージの削除

パッケージの削除には DROP PACKAGE/DROP PACKAGE BODY句を使用します。

パッケージの削除構文
--PACKAGE BODYの削除
DROP PACKAGE BODY <パッケージ名>;

--PACKAGEの削除
DROP PACKAGE <パッケージ名>;

パッケージ削除の例文
--(例)パッケージ(パッケージ名:test_pac,パッケージBODY名:test_pac)を削除する。 DROP PACKAGE BODY test_pac; DROP PACKAGE test_pac;

パッケージの情報を表示する

パッケージの情報を表示するには ALL_OBJECTSデータディクショナリビューを検索します。

パッケージの情報を表示する
--パッケージ(HEAD)
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE';

--パッケージ(BODY)
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE BODY';

データディクショナリビューには、DBA_やUSER_で始まるものもあります。
 違いは参照できる範囲が異なります。

【ALL_OBJECTSの主要カラム】
カラム内容
OWNERオブジェクトの所有者
OBJECT_NAMEオブジェクト名
SUBOBJECT_NAMEサブオブジェクト名 (存在する場合のみ)
OBJECT_IDオブジェクトID
OBJECT_TYPEオブジェクトの種類 (TABLE/VIEW/FUNCTION/PROCEDUREなど)
CREATED作成日時
LAST_DDL_TIME変更日時
TIMESTAMP作成日時(文字列)
STATUSオブジェクトのステータス(VALID/INVALID)
TEMPORARY一時オブジェクトかどうか (Y/N)
GENERATEDシステムによって作成されたオブジェクトかどうか (Y/N)

ここで取り上げているカラムは、主要なカラムのみです。

ToTop