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_で始まるものもあります。
違いは参照できる範囲が異なります。
カラム | 内容 |
---|---|
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) |
ここで取り上げているカラムは、主要なカラムのみです。