Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Dudas de SQL Loader

Estas en el tema de Dudas de SQL Loader en el foro de Oracle en Foros del Web. Hola nuevamente... tengo un pequeño problema, o más bien dicho... no he encontrado una solución concreta... resulta que tengo una tabla con 7 campos, a ...
  #1 (permalink)  
Antiguo 16/11/2007, 16:40
 
Fecha de Ingreso: enero-2004
Mensajes: 52
Antigüedad: 20 años, 10 meses
Puntos: 0
Dudas de SQL Loader

Hola nuevamente...

tengo un pequeño problema, o más bien dicho... no he encontrado una solución concreta...

resulta que tengo una tabla con 7 campos, a la que debo cargarle datos y que pienso hacerlo por sql loader... sin embargo, el archivo .dat que nos envían, con los campos separados por ';', tiene 16 campos... obviamente no coinciden el nro de campos de destino con origen...

pense hacer un proceso en awk para eliminar los campos que están demás, pero no resulta del todo debido a la diferencia de datos en una sola columna...

hay una manera en que SQL Loader se le pueda especificar qué campos de ese archivo .dat son los que tiene que insertar... o sea, tomar los 16 campos de ese archivo y solo insertar los 7 que necesita, sin que arroje error por las diferencias entre origen/destino


de antemano, gracias...
__________________
I can see the bodies on the wall... all the nightmare dreams i can't recall come...
  #2 (permalink)  
Antiguo 16/11/2007, 18:35
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años, 1 mes
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.
  #3 (permalink)  
Antiguo 20/11/2007, 07:15
 
Fecha de Ingreso: enero-2004
Mensajes: 52
Antigüedad: 20 años, 10 meses
Puntos: 0
Re: Dudas de SQL Loader

exactamente lo q estaba buscando....

te pasaste... muchas gracias...
__________________
I can see the bodies on the wall... all the nightmare dreams i can't recall come...
  #4 (permalink)  
Antiguo 21/11/2007, 15:04
 
Fecha de Ingreso: enero-2004
Mensajes: 52
Antigüedad: 20 años, 10 meses
Puntos: 0
Re: Dudas de SQL Loader

está arrojando algunos errores ahora...

especificamente este:

SQL*Loader-404:
La columna NULL aparece más de una vez en el bloque INTO TABLE de "PLANEX".

alguna sigerencia?
__________________
I can see the bodies on the wall... all the nightmare dreams i can't recall come...
  #5 (permalink)  
Antiguo 21/11/2007, 15:13
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años, 1 mes
Puntos: 85
Re: Dudas de SQL Loader

Hola,

Si, el problema es que debes estar utilizando la linea null filler mas de una vez, lo que es correcto dado que el fichero de datos tenia 16 campos y la tabla solo 7.

El problema, y me olvide de comentarlo, es que la palabra null me la invente, y en realidad el nombre del campo en el fichero de control debe ser unico, por lo tanto la solucion seria algo asi

Código:
load data
infile 'nombres.dat'
into table loader
fields terminated by '|' optionally enclosed by '"'
(
id,
null filler,
name,
null2 filler,
otro_campo,
null3 filler,
etc
)
Disculpas por la omision :)

Saludos
  #6 (permalink)  
Antiguo 21/11/2007, 15:16
 
Fecha de Ingreso: enero-2004
Mensajes: 52
Antigüedad: 20 años, 10 meses
Puntos: 0
Re: Dudas de SQL Loader

sí... ya lo había encontrado... pero no está demás aclararlo...

gracias nuevamente
__________________
I can see the bodies on the wall... all the nightmare dreams i can't recall come...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 19:24.