e-learning、オラクル研修、LMS(学習管理システム)のiStudy

e-learning、オラクル研修、LMS(学習管理システム)のiStudy

第27回 「パッケージの概要」

2012.07.02

今回からは、パッケージについて解説したいと思います。いわば上級編です。
上級編としては、パッケージ、トリガー、その他の機能など解説していきます。

今回はまずパッケージですが、一般的にパッケージとは、何かをまとめたものという意味ですよね。
PL/SQLのパッケージは、プロシージャやファンクションの他、変数などをまとめることができます。

パッケージ化して、まとめることで、どんなメリットがあるのでしょうか?

それは、パッケージは全体がメモリーに読み込まれますので、関連するプロシージャファンクションをパッケージに格納すると、パフォーマンス上のメリットがあります。
その他にも、パッケージ化することで可能になる機能も多々ありますので、パッケージは、単に「まとめる」以上の意味があるのです。

では、詳しい文法や機能の解説は次回以降にしますが、今回は簡単な例で雰囲気だけをつかんでいただきたいと思います。
パラメータP1をSQL*Plusの画面に表示するPROC1プロシージャを格納するPAC1というパッケージを作成し、実際にそのプロシージャをコールしている記述です。

<最初にパッケージ仕様部を作成する>
SQL> CREATE PACKAGE PAC1
  2  IS
  3    PROCEDURE PROC1 ( P1 IN VARCHAR2);
  4  END;
  5  /

パッケージが作成されました。

<次にパッケージ本体を作成する>
SQL> CREATE PACKAGE BODY PAC1
  2  IS
  3     PROCEDURE PROC1 ( P1 IN VARCHAR2)
  4     IS
  5     BEGIN
  6       DBMS_OUTPUT.PUT_LINE(P1);
  7     END;
  8  END;
  9  

パッケージ本体が作成されました。

SQL> SET SERVEROUTPUT ON -- SQL*Plusの画面出力を有効にしている

<パッケージ内のプロシージャをコール>
SQL> EXEC PAC1.PROC1('HELLO, PL/SQL PACKAGE !');
HELLO, PL/SQL PACKAGE !     ←たしかに、画面表示できた

PL/SQLプロシージャが正常に完了しました。

詳しい文法解説は次回以降ですが、簡単に解説します。
パッケージはまず、パッケージ仕様部というものを作成します。
CREATE PACKAGE文を使用します。
パッケージ仕様部を作成しいる2行目で、PROC1プロシージャの記述がありますが、完全なものではないことに注目してください。
すなわち、「PROCEDURE PROC1 ( P1 IN VARCHAR2);」というたった1行しかありません。
これが、パッケージ仕様部での、プロシージャやファンクションの記述の特長です。詳細は次回説明します。

パッケージ仕様部を作成したら次にパッケージ本体というものを作成します。
CREATE PACKAGE BODY 文を使用します。パッケージ本体を作成するときに、プロシージャやファンクションの完全な定義を記述します。
例えば、本体の3行目から7行目にかけて、PROC1プロシージャの完全な定義となっていることに注目してください。
すなわち、仕様部でプロシージャは完全な定義ではありませんが、本体では完全に定義します。

パッケージ本体も完成すれば、パッケージ内のプロシージャなどをコールできます。
PROC1プロシージャをコールするときにパッケージ名PAC1を頭につけてPAC1.PROC1と記述していることに注目してください。
このようにパッケージ内のプログラムを呼び出すときは頭にパッケージ名をつけます。これを接頭辞といいます。

では、今回は雰囲気がつかめたところで終わります。次回、ご期待ください。

先頭へ戻る