6.8 オブジェクトを表示するために作成する参照

この例6-2例6-4の連結された例グループにおいて、dept_viewビューから選択された各オブジェクトは、部門番号の値から導出された一意のオブジェクト識別子を持ちます。リレーショナルの場合、従業員表empの外部キーdeptnoは、部門表deptの主キー値deptnoと一致します。主キー値はdept_view内にオブジェクト識別子を作成するため、emp_viewの外部キー値はdept_viewの主キー値への参照を作成できます。

主キーのオブジェクト参照を合成するには、MAKE_REF演算子を使用します。この演算子は、参照がポイントするビューまたは表の名前および外部キー値のリストをとり、参照されたビューの中の特定のオブジェクトと一致するような参照のオブジェクト識別子部分を作成します。

例6-6では、まず従業員型emp_tを作成し、次にその型に基づいたビューを作成することにより、従業員の番号、名前、給料、および所属部門への参照を持つemp_viewビューを作成します。

例6-6 ビューでのオブジェクトへの参照の作成

-- Requires Ex. 6-2 and Ex. 6-4
-- if you have previously created emp_t, you must drop it
CREATE TYPE emp_t AS OBJECT (
  empno    NUMBER,
  ename    VARCHAR2(20),
  salary   NUMBER,
  deptref  REF dept_t);
/
CREATE OR REPLACE VIEW emp_view OF emp_t WITH OBJECT IDENTIFIER(empno)
   AS SELECT e.empno, e.empname, e.salary, 
                      MAKE_REF(dept_view, e.deptno) 
         FROM emp e;

ビューの中のdeptref列に、部門の参照が格納されます。次の簡単な問合せでは、Redwood S市にある部門のすべての従業員を取り出します。

SELECT e.empno, e.salary, e.deptref.deptno
  FROM emp_view e
 WHERE e.deptref.address.city = 'Redwood S';

   EMPNO     SALARY DEPTREF.DEPTNO
---------- ---------- --------------
         2       1000            100
         1        900            100
         4       1500            200
         3       1000            200

例6-7に示すようにMAKE_REFのかわりにREF修飾子を使用してemp_viewを作成しても、dept_viewオブジェクトへの参照が取得できる点に注意してください。