Ver Mensaje Individual
  #16 (permalink)  
Antiguo 13/02/2008, 09:44
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años, 1 mes
Puntos: 85
Re: manejo de timestamp

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