Oracle 表関数(table関数)を使ってテーブルオブジェクトを作成する
実際のテーブルは存在しないけど、プログラム上で二次元配列構造を定義し、
それをテーブルのように扱うために表関数(table()関数)というものがある。
PL/SQLプログラム上で配列の配列を定義する場合にも使えるので、使用方法をまとめてみた。
今回は例として、IDと名前だけを持つ簡単な従業員テーブルの構造を二次元配列データ構造として定義した。
テーブルとして定義するならこんなかんじ。
CREATE TABLE EMP( EMPID VARCHAR2(10); EMPANME VARCHAR2(10); );
今回、これをPL/SQLパッケージで二次元配列として定義した。
まず、行のtypeを定義する。
create or replace type emp_rec is object(empid varchar2(10), empname varchar2(10));
次に、そのtypeのtable型とみなしたtypeを定義する。
create or replace type emp is table of emp_rec;
テスト用に3行のempデータを定義し、それをテーブル形式で返す関数を作成する。
- package spec
create or replace package emp_pkg is function get_table return emp; end;
- package body
create or replace package body emp_pkg is function get_table return emp is e emp; er1 emp_rec; er2 emp_rec; er3 emp_rec; begin er1 := emp_rec('1001', 'Yamada'); er2 := emp_rec('1002', 'Tanaka'); er3 := emp_rec('1003', 'Suzuki'); e := emp(); e.extend(3); e(1) := er1; e(2) := er2; e(3) := er3; return e; end; end;
これをtable関数を使うと、以下のようにselect文で検索できる。
select * from table(emp_pkg.get_table);
実行結果は以下。
EMPID | EMPNAME |
---|---|
1001 | Yamada |
1002 | Tanaka |
1003 | Suzuki |
一時的なデータをViewで返したり、複雑なロジックでデータを抽出したりするときに便利。