Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/11/2007, 18:35
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Dudas de SQL Loader

Hola,

Tengo la siguiente tabla,

Código:
SQL> desc loader;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NAME                                               VARCHAR2(30)


SQL> select * from loader;

no rows selected
Con este fichero de control del SQL*Loader,

Código:
oracle@buo:~/scripts/data> more control.ctl 
load data
infile 'nombres.dat'
into table loader
fields terminated by '|' optionally enclosed by '"'
(
id,
name
)
Y este es el fichero de datos, como veras tiene 3 columnas y la tabla solo tiene 2

Código:
oracle@buo:~/scripts/data> more nombres.dat 
1|"nombre 1"|"apellido"
2|"nombre 2"|"apellido"
3|"nombre 3"|"apellido"
4|"nombre 4"|"apellido"
5|"nombre 5"|"apellido"
6|"nombre 6"|"apellido"
7|"nombre 7"|"apellido"
8|"nombre 8"|"apellido"
Realizamos la carga, y como es de esperar, carga las primeras 2 columnas del fichero de datos.

Código:
oracle@buo:~/scripts/data> sqlldr / control=control.ctl data=nombres.dat 

SQL*Loader: Release 10.2.0.1.0 - Production on Sun Nov 18 11:52:59 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Commit point reached - logical record count 8

SQL> select * from loader;

        ID NAME
---------- ------------------------------
         1 nombre 1
         2 nombre 2
         3 nombre 3
         4 nombre 4
         5 nombre 5
         6 nombre 6
         7 nombre 7
         8 nombre 8

8 rows selected.
Ahora, empezamos de nuevo.

Código:
SQL> truncate table loader;

Table truncated.
Modifico el fichero de control agregando un filler en la segunda columna, para que la ignore, es decir no la mapea a ninguna columna de la tabla.

Código:
oracle@buo:~/scripts/data> more control.ctl 
load data
infile 'nombres.dat'
into table loader
fields terminated by '|' optionally enclosed by '"'
(
id,
null filler,
name
)
Ejecutamos la carga nuevamente,

Código:
oracle@buo:~/scripts/data> sqlldr / control=control.ctl data=nombres.dat 

SQL*Loader: Release 10.2.0.1.0 - Production on Sun Nov 18 11:54:11 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Commit point reached - logical record count 8

SQL> select * from loader;

        ID NAME
---------- ------------------------------
         1 apellido
         2 apellido
         3 apellido
         4 apellido
         5 apellido
         6 apellido
         7 apellido
         8 apellido

8 rows selected.
Y listo, ya esta la tercera columna del fichero de datos cargada en la segunda columna de la tabla.

Saludos.