There could be ways of doing this in SQL loader. But I would stick with what i know best than to play around with different options of Sql Loader. I would load a temporary table with all the fields as it is from the file and write SQL statements to populate my tables from the temporary table.
use decode function for conditioning
INTO TABLE mailing_list
FIELDS TERMINATED BY ","
mailing_addr "decode(:mailing_addr, null, :addr, :mailing_addr)",
mailing_city "decode(:mailing_city, null, :city, :mailing_city)",
load data into multiple tables at once?
Look at the following control file:
INTO TABLE emp
WHEN empno != ' '
( empno POSITION(1:4) INTEGER EXTERNAL,
ename POSITION(6:15) CHAR,
deptno POSITION(17:18) CHAR,
mgr POSITION(20:23) INTEGER EXTERNAL
INTO TABLE proj
WHEN projno != ' '
( projno POSITION(25:27) INTEGER EXTERNAL,
empno POSITION(1:4) INTEGER EXTERNAL
see attach file