6.2 オブジェクト・ビューの定義

オブジェクト・ビューを使用すると、ユーザーに示すデータのみを表示できます。

オブジェクト・ビューを定義する手順は、次のとおりです。

  1. 既存のリレーショナル表の列にそれぞれ対応するデータ型の属性を持つオブジェクト型を定義します。
  2. リレーショナル表からデータを抽出する方法を指定する問合せを作成します。オブジェクト型の属性と同じ順序で、リレーショナル表の列を指定します。
  3. 基礎となるデータの属性に基づいて、オブジェクト識別子として機能するように一意の値を指定し、ビュー内のオブジェクトを指すポインタ(REF)を作成できるようにします。既存の主キーを使用できることが多いです。

オブジェクト型の属性が既存の表の列に正確に対応していないオブジェクト・ビューを更新するには、次の手順を実行する必要があることがあります。

アプリケーション・プログラムがオブジェクト・ビューのデータを更新するときに、Oracleに実行させるINSTEAD OFトリガー・プロシージャを作成します。「オブジェクト・ビューの操作」を参照してください。

これで、オブジェクト・ビューをオブジェクト表と同様に使用できます。

例6-1のSQL文は、各行がemployee_t型のオブジェクトであるオブジェクト・ビューを定義しています。

例6-1 オブジェクト・ビューの作成

CREATE TABLE emp_table (
    empnum   NUMBER (5),
    ename    VARCHAR2 (20),
    salary   NUMBER (9,2),
    job      VARCHAR2 (20));

CREATE TYPE employee_t AS OBJECT (
    empno    NUMBER (5),
    ename    VARCHAR2 (20),
    salary   NUMBER (9,2),
    job      VARCHAR2 (20));
/

CREATE VIEW emp_view1 OF employee_t
    WITH OBJECT IDENTIFIER (empno) AS
        SELECT e.empnum, e.ename, e.salary, e.job
            FROM emp_table e
            WHERE job = 'Developer';

insert into emp_table values(1,'John',1000.00,'Architect');
insert into emp_table values(2,'Robert',900.00,'Developer');
insert into emp_table values(3,'James',2000.00,'Director');

select * from emp_view1;


    EMPNO ENAME                    SALARY JOB
---------- -------------------- ---------- --------------------
         2 Robert                      900 Developer

リレーショナル表のempnum列のデータにアクセスするには、オブジェクト型のempno属性にアクセスします。