プライマリ・コンテンツに移動
Oracle® Databaseユーティリティ
12cリリース1 (12.1.0.2)
B71303-09
目次へ移動
目次
索引へ移動
索引

前
次

サブタイプを使用したオブジェクト表のロード

オブジェクト表の列オブジェクトがNOT FINALに基づいている場合、SQL*Loaderによって導出サブタイプをオブジェクト表にロードできます。前述のとおり、オブジェクト表に導出サブタイプをロードする場合に必要な構文は、典型的なリレーショナル表のロードの場合とほぼ同じです。ただし、この場合、実際に使用するサブタイプがオブジェクト表で有効であるかどうかをSQL*Loaderで判断できるように、サブタイプに名前を指定する必要があります。この概念を例11-12に示します。

例11-12 サブタイプを使用したオブジェクト表のロード

オブジェクトの型定義

CREATE TYPE employees_type AS OBJECT
  (name     VARCHAR2(30),
   age      NUMBER(3),
   emp_id   NUMBER(5)) not final;

CREATE TYPE hourly_emps_type UNDER employees_type
  (hours    NUMBER(3));

CREATE TABLE employees_v3 of employees_type;

制御ファイルの内容

   LOAD DATA

   INFILE 'sample.dat'
   INTO TABLE employees_v3
1  TREAT AS hourly_emps_type
   FIELDS TERMINATED BY ','
     (name     CHAR(30),
      age      INTEGER EXTERNAL(3),
      emp_id   INTEGER EXTERNAL(5),
2     hours    INTEGER EXTERNAL(2))

データ・ファイル(sample.dat)

   Johny Quest, 18, 007, 32,
   Speed Racer, 16, 000, 20,

注意:

例の左に付けた太字の数字は、次の注意事項と対応しています。

  1. TREAT AS句で指定すると、SQL*Loaderでは、実際の宣言型がemployee_typeであるオブジェクト表が、hourly_emps_type型であると宣言されたかのように処理されます

  2. hours属性はhourly_emps_typeの属性であるため、ここで使用できます。TREAT AS句が指定されていない場合、この属性はオブジェクト表の宣言型の属性ではないため、エラーが発生します。