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

前
次

オブジェクトに対するNULL値の指定

非スカラー・データ型に対するNULL値の指定は、スカラー・データ型に対する指定より多少複雑になります。オブジェクトは、その属性のサブセットをNULLにするか、すべての属性をNULL(NULLオブジェクトにかぎります)にするか、またはオブジェクト自身をNULL(アトミックNULLオブジェクト)にできます。

NULL属性の指定

列オブジェクトに対応するフィールドでは、NULLIF句を使用して、特殊属性をNULLに初期化するフィールド条件を指定できます。例11-5に、これを示します。

例11-5 NULLIF句を使用したNULL属性の指定

制御ファイルの内容

LOAD DATA
INFILE 'sample.dat'
INTO TABLE departments
  (dept_no      POSITION(01:03)    CHAR,
  dept_name     POSITION(05:15)    CHAR NULLIF dept_name=BLANKS,
  dept_mgr      COLUMN OBJECT
1    ( name     POSITION(17:33)    CHAR NULLIF dept_mgr.name=BLANKS,
1    age        POSITION(35:37)    INTEGER EXTERNAL NULLIF dept_mgr.age=BLANKS,
1    emp_id     POSITION(40:46)    INTEGER EXTERNAL NULLIF dept_mgr.empid=BLANKS))

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

2  101             Johny Quest            1024
   237   Physics   Albert Einstein   65   0000

注意:

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

  1. 各属性に対応するNULLIF句は、属性値をNULLにする条件を示します

  2. dept_mgrのage属性の値はNULLです。dept_nameの値もNULLです。

アトミックNULLの指定

列オブジェクトがNULL値(アトミックNULL)を取る条件を制御ファイルで指定するには、NULLIF句で使用するオブジェクトの名前は、マップ・フィールドの論理的な組合せに基づいている必要があります(たとえば、例11-5では、指定されたマップ・フィールドは、dept_nodept_namenameageおよびemp_idです。dept_mgrは、データ・ファイルのどのフィールドにも対応していない(マップされていない)ため、指定されたマップ・フィールドではありません)。

前述の方法は使用可能ですが、オブジェクトがNULL値を取るための条件がマップ・フィールドに依存していない場合は、理想的な方法ではありません。このような場合は、FILLERフィールドを使用できます。

FILLERフィールドをデータ・ファイルのフィールドにマップし(列オブジェクトがアトミックNULLかどうかを示す)、そのFILLERフィールドを列オブジェクトのNULLIF句のフィールド条件で使用できます。この例を例11-6に示します。

例11-6 FILLERフィールドを使用したデータのロード

制御ファイルの内容

LOAD DATA
INFILE 'sample.dat'
INTO TABLE departments_v2
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
   (dept_no         CHAR(5),
   dept_name        CHAR(30),
1  is_null          FILLER CHAR,
2  dept_mgr         COLUMN OBJECT NULLIF is_null=BLANKS
      (name         CHAR(30) NULLIF dept_mgr.name=BLANKS, 
      age           INTEGER EXTERNAL(3) NULLIF dept_mgr.age=BLANKS,
      emp_id        INTEGER EXTERNAL(7) 
                    NULLIF dept_mgr.emp_id=BLANKS,
      em_contact    COLUMN OBJECT NULLIF is_null2=BLANKS
         (name      CHAR(30) 
                    NULLIF dept_mgr.em_contact.name=BLANKS, 
         phone_num  CHAR(20) 
                    NULLIF dept_mgr.em_contact.phone_num=BLANKS)),
1  is_null2         FILLER CHAR)	

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

101,Mathematics,n,Johny Q.,,1024,"Barbie",608-251-0010,,
237,Physics,,"Albert Einstein",65,0000,,650-654-3210,n,

注意:

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

  1. FILLERフィールド(データ・ファイルがマップされており、対応する列がない)はCHAR型(デリミタ付きフィールドであるため、CHARのデフォルトはCHAR(255))のフィールドです。NULLIF句は、FILLERフィールド自体には使用できません

  2. is_nullフィールドが空白の場合は、NULL(アトミックNULL)の値を取得します。