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