列オブジェクトに対応するフィールドでは、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
注意:
例の左に付けた太字の数字は、次の注意事項と対応しています。
各属性に対応するNULLIF
句は、属性値をNULL
にする条件を示します
dept_mgr
のage属性の値はNULLです。dept_name
の値もNULLです。
列オブジェクトがNULL値(アトミックNULL)を取る条件を制御ファイルで指定するには、NULLIF
句で使用するオブジェクトの名前は、マップ・フィールドの論理的な組合せに基づいている必要があります(たとえば、例11-5では、指定されたマップ・フィールドは、dept_no
、dept_name
、name
、age
および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,
注意:
例の左に付けた太字の数字は、次の注意事項と対応しています。
FILLERフィールド(データ・ファイルがマップされており、対応する列がない)はCHAR
型(デリミタ付きフィールドであるため、CHAR
のデフォルトはCHAR(255)
)のフィールドです。NULLIF
句は、FILLERフィールド自体には使用できません
is_null
フィールドが空白の場合は、NULL(アトミックNULL)の値を取得します。