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に示すような
CREATE
DATABASE
LINK
コードを入力します。
例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
句が使用されています。