PL/SQLパッケージ
PL/SQLパッケージは、複数のプログラムを1つに纏めるたのオブジェクトです。前章まで解説してきた「ストアドプロシージャ」と「ストアドファンクション」について、一つのパッケージとして纏めることも可能です。パッケージは、Oracleに格納されるオブジェクトなので、プロシージャとファンクション同様に名前を定義します。なお、パッケージは仕様部と本体を別々に作成する必要がある点が、プロシージャやファンクションと異なる点です。
以下が、PL/SQLのパッケージイメージ図になります。
◆PL/SQLパッケージの特徴
●アプリケーション設計が容易
⇒仕様部と本体が分離されていることにより、パッケージ化(コンパイル)の際に、パッケージ本体は実行プログラムから直接参照されません。よってパッケージ本体の定義を変更しても実行側プログラムを再コンパイルする必要がありません。
●情報の隠ぺい
⇒仕様部には定義せずに、本体のみに定義することで、必要最低限のオブジェクトのみを公開し、その他のオブジェクトは隠ぺいすることができます。
●パフォーマンスの向上
⇒最初実行時にパッケージ内のオブジェクトがまとめてメモリ上に呼び出されるため、2回目以降のパフォーマンスが向上します。
●オブジェクトが永続的に利用可
⇒仕様部で定義したオブジェクトは、サブプログラム内で永続的に使用できます。
|
以下にパッケージ仕様部の作成例を示します。
SQL> CREATE OR REPLACE PACKAGE PACKAGE_SAMPLE
2 IS
3 PROCEDURE pobject_id;
4 PROCEDURE pobject_type(pname VARCHAR2);
5 END;
6 /
パッケージが作成されました。
SQL>
|
以下にパッケージ本体の作成例を示します。
SQL> CREATE OR REPLACE PACKAGE BODY package_sample
2 IS
3 pno NUMBER:=0;
4 ptype VARCHAR2(30);
5 pstatus VARCHAR2(30);
6
7 PROCEDURE pobject_id
8 IS
9 BEGIN
10 SELECT object_id INTO pno FROM dba_objects WHERE object_name='FUNCTION_SAMPLE';
11 DBMS_OUTPUT.PUT_LINE(pno);
12 END pobject_id;
13
14
15 PROCEDURE pobject_type(pname VARCHAR2)
16 IS
17 BEGIN
18 SELECT object_type,status INTO ptype,pstatus FROM dba_objects WHERE
object_name=pname;
19 DBMS_OUTPUT.PUT_LINE(ptype||' '||pstatus);
20 END pobject_type;
21
22 END;
23 /
パッケージ本体が作成されました。
SQL>
|
※コンパイル時がエラーもしくは警告が発生した場合の、対処方法は「PL/SQLコンパイルエラー確認方法」で解説しています。
以下にパッケージの確認方法を示します。
SQL> SET PAGES 1000
SQL> COLUMN object_name FORMAT a30;
SQL> COLUMN object_type FORMAT a30;
SQL> SELECT object_name,object_type,status FROM user_objects WHERE object_name='PACKAGE_SAMPLE';
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------------------ --------------
PACKAGE_SAMPLE PACKAGE VALID
PACKAGE_SAMPLE PACKAGE BODY VALID
SQL>
|
以下にパッケージの実行例を示します。
SQL> SET SERVEROUTPUT ON SQL> EXECUTE package_sample.pobject_id
20265
PL/SQLプロシージャが正常に完了しました。
SQL>
|
※パッケージ内のオブジェクトを使用するには、対象オブジェクトの前にパッケージ名を修飾します。
【書式】<パッケージ名>.<オブジェクト名>
|
スポンサードリンク
|