ここでは、Oracleオブジェクト型を表で列として使用する方法を示します。表定義によりOracleオブジェクト・データ型の列を含む行を、Oracleオブジェクト・データ型の表へのREFで置き換えることができます。Oracleのオブジェクト型の列を含む表定義があると想定します。Oracleオブジェクトと同名、同型の第2の表を作成します。元の表の列を第2の表へのREFとして再定義します。この効果的な方法により、次の利点が生まれます。
各表を別個のエンティティ・オブジェクトに変換できます。
表間のREFは、一方がOracleオブジェクト型を表すエンティティ・オブジェクトの間のアソシエーションに変換されます。
表を表すエンティティ・オブジェクトおよびOracleオブジェクト型を表すエンティティ・オブジェクトについて、エンティティ・レベルの検証を個別に作成できます。
Oracleオブジェクト型を表すエンティティ・オブジェクトを読取り専用に、表を表すエンティティ・オブジェクトを更新可能にすることができます。REF(またはアソシエーション)によって、通常更新可能なエンティティ・オブジェクトに読取り専用属性を付けることができます。
表およびOracleオブジェクト型のエンティティ・オブジェクトを作成した後に、「アソシエーション」ウィザードを使用して「構成」フラグを設定します。子を削除するまで、親エンティティ・オブジェクトは削除できません。
次の例に、この手法を利用するために必要なSQLコードを示します。(この例は、1人が1つのアドレスを使用する1:1の例であることに注意してください。この他に該当する例としては、注文の明細品目など1:Mの場合があります。)例は、address_objtyp
をOracleオブジェクト型として定義することから始まります。次に、型がaddress_objtab
で、address_objtyp
という名前の表を作成します。表people_reltab2
の定義は、すでに次の行を置き換えるよう変更されています。
address address_objtyp
置き換えるREF文は次のとおりです。
address_ref REF address_objtyp
SCOPE IS address_objtab); -- REF specified
SQLのコードは、データを表に挿入して終了します。
CREATE TYPE address_objtyp AS OBJECT ( street VARCHAR2(200), city VARCHAR2(200), state CHAR(2), zipcode VARCHAR2(20)); /
CREATE TABLE address_objtab OF address_objtyp ; /
CREATE TABLE people_reltab2 (id NUMBER(4) CONSTRAINT pk_people_reltab2 PRIMARY KEY, name VARCHAR(15), Phone NUMBER(6), address_ref REF address_objtyp SCOPE IS address_objtab ); -- REF specified /
insert into address_objtab values(address_objtyp ('St1','FosterCity', 'CA', '94491')); insert into address_objtab values (address_objtyp('St2','Redwood', 'CA', '94331')); insert into people_reltab2 values( 1, 'Sanjay',911, (SELECT REF(p) FROM address_objtab p WHERE street = 'St1')); insert into people_reltab2 values( 2, 'KING',1241, (SELECT REF(p) FROM address_objtab p WHERE street = 'St2'));
注意: 属性が配列型の場合、逆方向生成用の配列に対して要素の型を入力する必要があります。
Copyright © 1997, 2007, Oracle. All rights reserved.