In fields corresponding to column objects, you can use the NULLIF
clause to specify the field conditions under which a particular attribute should be initialized to NULL
. Example 11-5 demonstrates this.
Example 11-5 Specifying Attribute Nulls Using the NULLIF Clause
Control File Contents
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))
Data File (sample.dat)
2 101 Johny Quest 1024
237 Physics Albert Einstein 65 0000
To specify in the control file the condition under which a particular object should take a null value (atomic null), you must follow that object's name with a NULLIF
clause based on a logical combination of any of the mapped fields (for example, in Example 11-5, the named mapped fields would be dept_no
, dept_name
, name
, age
, emp_id
, but dept_mgr
would not be a named mapped field because it does not correspond (is not mapped) to any field in the data file).
Although the preceding is workable, it is not ideal when the condition under which an object should take the value of null is independent of any of the mapped fields. In such situations, you can use filler fields.
You can map a filler field to the field in the data file (indicating if a particular object is atomically null or not) and use the filler field in the field condition of the NULLIF
clause of the particular object. This is shown in Example 11-6.
Example 11-6 Loading Data Using Filler Fields
Control File Contents
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)
Data File (sample.dat)
101,Mathematics,n,Johny Q.,,1024,"Barbie",608-251-0010,, 237,Physics,,"Albert Einstein",65,0000,,650-654-3210,n,
The callouts, in bold, to the left of the example correspond to the following notes:
The filler field (data file mapped; no corresponding column) is of type CHAR
(because it is a delimited field, the CHAR
defaults to CHAR(255)
). Note that the NULLIF
clause is not applicable to the filler field itself
Gets the value of null (atomic null) if the is_null
field is blank.