表へのREFによる列オブジェクトの置換

ここでは、Oracleオブジェクト型を表で列として使用する方法を示します。表定義によりOracleオブジェクト・データ型の列を含む行を、Oracleオブジェクト・データ型の表へのREFで置き換えることができます。Oracleのオブジェクト型の列を含む表定義があると想定します。Oracleオブジェクトと同名、同型の第2の表を作成します。元の表の列を第2の表へのREFとして再定義します。この効果的な方法により、次の利点が生まれます。

次の例に、この手法を利用するために必要な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'));    

注意: 属性が配列型の場合、逆方向生成用の配列に対して要素の型を入力する必要があります。


Oracleオブジェクト型の表現