Hola,
El error ORA-01722 lo da Oracle cuando le pedimos convertir un valor al tipo NUMBER y no lo puede hacer porque existen caracteres no convertibles, fijate el ejemplo
Código:
SQL> select to_number('1') from dual;
TO_NUMBER('1')
--------------
1
SQL> select to_number('a') from dual;
select to_number('a') from dual
*
ERROR at line 1:
ORA-01722: invalid number
Si generas el fichero bad, donde el SQL*Loader deja las filas descartadas, vas a ver que al menos uno de los campos del fichero contiene valores que no se pueden convertir a NUMBER.
Como bien dices, los datos en el fichero no tienen tipo, Oracle hace la conversion implicita en funcion del tipo de dato de cada una de las columnas de las tablas, en el caso de la funcion TO_TIMESTAMP hay una tarea adicional que es indicarle la mascara, es decir, la forma en que viene la fecha, esto solo hace falta para los tipos NUMBER cuando quieres especificar una mascara para decimales.
Con el parametro bad le indicas el nombre del fichero.
Código:
sqlldr / control=control.ctl data=datos.dat bad=datos.bad
Saludos