例11-4に、NOT FINALのベース・オブジェクト型を拡張して新しく導出されたサブタイプを作成する例を示します。表定義の列オブジェクトは、ベース・オブジェクト型であると宣言されますが、サブタイプがベース・オブジェクト型から導出される場合は、SQL*Loaderによってサブタイプを列オブジェクトにロードできます。
例11-4 サブタイプを使用した列オブジェクトのロード
オブジェクトの型定義
CREATE TYPE person_type AS OBJECT (name VARCHAR(30), ssn NUMBER(9)) not final; CREATE TYPE employee_type UNDER person_type (empid NUMBER(5)); CREATE TABLE personnel (deptno NUMBER(3), deptname VARCHAR(30), person person_type);
制御ファイルの内容
LOAD DATA INFILE 'sample.dat' INTO TABLE personnel FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (deptno INTEGER EXTERNAL(3), deptname CHAR, 1 person COLUMN OBJECT TREAT AS employee_type (name CHAR, ssn INTEGER EXTERNAL(9), 2 empid INTEGER EXTERNAL(5)))
データ・ファイル(sample.dat)
101,Mathematics,Johny Q.,301189453,10249, 237,Physics,"Albert Einstein",128606590,10030,
注意:
例の左に付けた太字の数字は、次の注意事項と対応しています。
TREAT
AS
句で指定すると、SQL*Loaderでは、実際の宣言型がperson_type
である列オブジェクトperson
が、導出型employee_type
であると宣言されたかのように処理されます。
empid
属性はemployee_type
の属性であるため、ここで使用できます。TREAT
AS
句が指定されていない場合、この属性は列の宣言型の属性ではないため、エラーが発生します。