PL/SQLの基礎を4日でマスターする【最終日】


こんにちは。
PL/SQLの基礎を4日でマスターする、と題打ったこのシリーズも今回が最終回です。
最終回の今回は、パッケージとコレクションについて見ていきます。

ただ、パッケージやコレクションは取り立てて説明することは特にないと思っています。
なぜなら、パッケージやコレクションというものはPLSQL独自の概念ではなく、他の様々な言語にも散見される概念だからです。
なのでむしろ、PLSQLでパッケージやコレクションを学ぶよりも、それぞれの言語に登場するパッケージやコレクションを学んだ方が効率的だからです。

そこでこの記事では、パッケージやコレクションの宣言方法、使い方やPLSQL独自の概念について触れていきたいと思います。

0.Agenda

  1. パッケージ
  2. コレクション
  3. 最後に

1. パッケージ

まずPLSQLのパッケージはパッケージ仕様部とパッケージ本体に分かれます。
そこでまず、パッケージ仕様部の作成方法について見ていきます。
仕様部にはパッケージを含むオブジェクトのプログラム名を記述します。仕様部で宣言されたオブジェクトは、パッケージ内のプログラムだけでなく、パッケージ外のプログラムからも参照できます。

パッケージの作成(仕様部)

CREATE OR REPLACE PACKAGE test_pack
IS
  PROCEDURE employee_ename(name VARCHAR2);
  PROCEDURE employee_empno(eno NUMBER);
  pub_no NUMBER := 0;
END;
/

パッケージの作成(本体)

/* CREATE OR REPLACE BODY <パッケージ名> IS <本体> END[<パッケージ名>]; */
/* 本体 */
CREATE OR REPLACE PACKAGE BODY test_pack
IS
  pri_no NUMBER := 0;

  PROCEDURE employee_ename(name VARCHAR2)
    IS
    BEGIN
      SELECT sal INTO pri_no FROM emp WHERE ename = name;
      DBMS_OUTPUT.PUT_LINE(pri_no);
    END employee_ename;

    PROCEDURE employee_empno(eno NUMBER)
    IS
    BEGIN
      SELECT sal INTO pub_no FROM emp WHERE empno = eno;
      DBMS_OUTPUT.PUT_LINE(pub_no);
    END employee_empno;
END;
/

作成したパッケージを使用するには、対象オブジェクトの前にパッケージ名を修飾します。

パッケージオブジェクトの使用方法
<パッケージ名>.<オブジェクト名>

2. コレクション

コレクションとは、同じデータ型の複数の値を受け取る変数です。
コレクションは、要素と索引からなり、索引番号を使用して各要素へアクセスします。
今回はPLSQLで用いられるコレクションで最も一般的な、結合配列について見ていきます。

コレクションの使用例
/* テーブル型の定義 */
DECLARE 
  /* TYPE <テーブル型> IS TABLE OF <データ型> INDEX BY {BINARY_INTEGER | PLS_INTEGER | <文字データ型>(上限サイズ)}; */
  TYPE tab IS TABLE OF VARCHAR2(10) INDEX BY PLS_INTEGER;

  /* 結合配列の定義 */
  /* <結合配列名> <テーブル型名>; */
  col_table tab;

BEGIN
  col_table(1) := 'part1';
  col_table(2) := 'part2';
  col_table(3) := 'part3';

  DBMS_OUTPUT.PUT_LINE(col_table(1));
  DBMS_OUTPUT.PUT_LINE(col_table(2));
  DBMS_OUTPUT.PUT_LINE(col_table(3));
END;
/

3. 最後に

以上で、PLSQLの基礎は終了です。これで簡単なプログラムは組めるようになったと思うので、あとはどんどん自分でプログラムを作っていくといいかと思います。
それから、他の細かい知識については、ぜひとも以下で紹介している参考文献を購入してみてください。きっと役に立つと思います。


【参考文献】
『プロとしてのOracle PL/SQL入門』 アシスト教育部 2017年 第3版