6.12 オブジェクト・モデルのリモート表への適用
リモート表は、オブジェクト表のように直接アクセスできませんが、オブジェクト・ビューでは、あたかもオブジェクト表であるかのように、リモート表にアクセスできます。
ワシントンD.C.およびシカゴに支店を持つ会社について考えてみます。各支店に、従業員表があります。ワシントンの本社には、すべての部門のリストを持つ部門表があります。組織全体のビューを作成するには、個々のリモート表の上にビューを作成し、次に組織全体のビューを作成します。
このためには、次の手順を実行する必要があります。
-
listener.oraのエントリ((ADDRESS=(PROTOCOL=tcp)(HOST=stadv07.us.example.com)(PORT=1640))など)を更新します。 -
tnsnames.oraにエントリ(chicago=(DESCRIPTION= (ADDRESS=(PROTOCOL=ipc)(KEY=linux)) (CONNECT_DATA=(SERVICE_NAME=linux.regress.rdbms.dev.us.example.com)))など)を追加します。 -
例6-9に示すような
CREATEDATABASELINKコードを入力します。
例6-9では、各従業員表のオブジェクト・ビューを作成してから、グローバル・ビューを作成しています。
例6-9 リモート表にアクセスするためのオブジェクト・ビューの作成
-- Requires Ex. 6-2, Ex. 6-4, and Ex. 6-6
-- Example requires DB links, such as these, modify for your use and uncomment
-- CREATE DATABASE LINK chicago CONNECT TO hr IDENTIFIED BY hr USING 'inst1';
-- CREATE DATABASE LINK washington CONNECT TO hr IDENTIFIED BY hr USING 'inst1';
CREATE VIEW emp_washington_view (eno, ename, salary, job)
AS SELECT e.empno, e.empname, e.salary, e.job
FROM emp@washington e;
CREATE VIEW emp_chicago_view (eno, ename, salary, job)
AS SELECT e.empno, e.empname, e.salary, e.job
FROM emp@chicago e;
CREATE VIEW orgnzn_view OF dept_t WITH OBJECT IDENTIFIER (deptno)
AS SELECT d.deptno, d.deptname,
address_t(d.deptstreet,d.deptcity,d.deptstate,d.deptzip) AS deptaddr,
CAST( MULTISET (
SELECT e.eno, e.ename, e.salary, e.job
FROM emp_washington_view e)
AS employee_list_t) AS emp_list
FROM dept d
WHERE d.deptcity = 'Washington'
UNION ALL
SELECT d.deptno, d.deptname,
address_t(d.deptstreet,d.deptcity,d.deptstate,d.deptzip) AS deptaddr,
CAST( MULTISET (
SELECT e.eno, e.ename, e.salary, e.job
FROM emp_chicago_view e)
AS employee_list_t) AS emp_list
FROM dept d
WHERE d.deptcity = 'Chicago';
このビューは、各部門のすべての従業員のリストを持ちます。従業員は複数の部門に所属できないため、UNION ALL句が使用されています。