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オブジェクトへの参照が取得できる点に注意してください。