URGENTE: SQL Loader

eflucas
17 de Febrero del 2010
Buenos dias,
Estoy haciendo cargas con Loader a través de JCL.
Tengo dos problemas:
Por un lado Append no me añade registros sino que si la tabla tiene datos da error ORA-03114 y se desconecta.
Y a su vez lanzandolo a traves de un JCL me da errores de desconexión también.

¿Alguien podría ayudarme? Estoy algo agobiada en el trabajo.

Muchas gracias a todos !!
Eva

maverick2kevolution
17 de Febrero del 2010
Hola:
No tengo idea con que cosa lo estas haciendo, pero si lo quieres hacer de otra forma lo puedes hacer de la siguiente manera:

Ejemplo de Carga de Datos Utilizando sqlldr:

Esta es una forma bastante ordenada y Facil de Modificar e implementar:

Antes que todo debemos disponer del siguiente esquema de carpetas, lo otro se va a ir
haciendo a medida que pasa el documento.

Directorio: Carga de Datos
Subdirectorio BAD: Contendra los datos que no se pudieron insertar.
Subdirectorio CSV: Contendra los archivos a carga en formato csv (separado por comas)
Personas.CSV
Subdirectorio CTL: Contendra los archivos de control.
Personas.CTL
Ciudades.CTL
Subdirectorio DSC: Contendra los datos de archivos descartados.
Subdirectorio LOG: Contendra el log de la carga de datos.
Subdirectorio TXT: Contendra los datos a cargar en archivo txt.
Ciudades.TXT
Personas.par
Ciudades.par
Carga de Datos.Bat: Contiene los comandos para ejecutar el sqlldr


Ejemplo Archivo CSV: Personas.CSV
---------------------------------
Codigo,Nombre, sexo, Nacimiento
11111112,SERGIO MAURICIO CATHALIFAUD,m,10-10-2000
11111113,VICTOR MARIN,m,10-10-2000
11111114,JOSE LUIS VARGAS,m,10-10-2000
11111115,CARLOS MOISES OLMOS,m,10-10-2000
11111116,MANUEL ANDRES HUAIQUIMIL,m,10-10-2000
11111117,CARLOS ARQUIMIDES MUÑOZ,m,10-10-2000
11111118,AUGUSTO RENE MALDONADO,m,10-10-2000
11111119,CLAUDIO LANDAETA,m,10-10-2000
11111120,JUAN MANUEL CONA,m,10-10-2000
11111121,JOSEPT JOHN,m,10-10-2000
11111122,MARCO CARCAMO,m,10-10-2000
11111123,JOSE NORBERTO FUNES,m,10-10-2000
11111124,ALEXANDRA CLOTILDE DEL CARMEN CARDENAS,f,10-10-2000
11111125,MAURICIO ANDRES CARDENAS,m,10-10-2000
11111126,MIGUEL VELASQUEZ,m,10-10-2000
11111127,GONZALO ANDRES LAVADO,m,10-10-2000
11111128,HARRISON JOAQUIN CATALAN,m,10-10-2000
11111129,FERNANDO LANDETA,m,10-10-2000
11111130,RODRIGO ANDRES CARVAJAL,m,10-10-2000
11111131,SOLEDAD OVALLE,f,10-10-2000

Ejemplo Archivo TXT: Ciudades.TXT
---------------------------------
Codigo, Nombre
123456789012345678901234567890
01 Puerto Montt
02 Valdivia
03 Temuco
04 Puerto Varas
05 Iquique

Cree el usuario Prueba como:
----------------------------
Create user Prueba identified by prueba;
grant connect, resource to prueba;


Las tablas son las siguientes:
------------------------------
create table Prueba.Personas(
Codigo integer,
Nombre Varchar2(50) not null,
Nacimiento Date,
Constraint pk_Codigo_P primary key(Codigo)
);

Create table Prueba.Ciudades(
Codigo number(2),
Nombre varchar2(50) not null,
Constraint pk_Codigo_C primary key(Codigo)
);


Archivo: Personas.PAR
---------------------
userid=Prueba/Prueba
control=.ctlPersonas.ctl
log=.logPersonas.log
SKIP=1
ERRORS=500



userid: es la identificacion de usuario, puede ser el mismo usuario dueño de las tablas o sys, system
si tiene mas de una instancia oracle, debe colocar @Nombre_Instancia.
control: le indica la ubicacion del archivo de control para la carga de datos.
Log: Indica la ubicacion y nombre del archivo de log que se va a crear despues de la carga de datos.
Skip: le indica que lines del archivo que contiene los datos va a omitir, en el archivo
errors: indicala cantidad maxima de errores que puede tener la carga de datos, si es igual se para la carga.


Archivo: Ciudades.PAR
---------------------
userid=Prueba/Prueba
control=.ctlCiudades.ctl
log=.logCiudades.log
SKIP=2
ERRORS=500



Archivo: Personas.CTL
---------------------
LOAD DATA
INFILE '.CSVPersonas.csv' -- Archivo que contiene los datos a cargar
BADFILE '.BADPersonas.BAD' -- Archivo que tiene los registros malos
DISCARDFILE 'DSCPersonas.dsc' -- Archivo con registros descartados
REPLACE --Reemplaza los datos de la tabla
INTO TABLE Prueba.Personas -- Nombre de la tabla
fields terminated by ',' -- Terminación de los datos
optionally enclosed by '"' -- Parametro que indica que los datos opcionalmente estan encerrados entre "


( Codigo, -- Lo ingresa tal cual como es
Nombre "INITCAP(:nombre)", -- se puede utilizar : para hacer referencia al dato a cargar
Sexo filler, -- No lo considera
Nacimiento "to_date(:Nacimiento,'DD/MM/YYYY')" -- se puede utilizar sql en la carga de datos.
)



Archivo: Ciudades.CTL
---------------------
LOAD DATA
INFILE '.TXTCiudades.txt' -- Archivo que contiene los datos a cargar
BADFILE '.BADCiudades.bad' -- Archivo que tiene los registros malos
DISCARDFILE 'DSCCiudades.dsc' -- Archivo con registros descartados
REPLACE --Reemplaza los los datos de la tabla
INTO TABLE Prueba.Ciudades -- Nombre de la tabla

-- Hay que tener en cuenta que sean espacion y no TABS lo que tenga el archivo, por lo que es recomendable que sea un ARCHIVO CSV
(codigo position(1:2) integer external, --Indica la posicion y que es un integer
Nombre position(11:25) char -- indica la posicion y que es un caracter
)


Cambiar Archivo: Personas.CTL a.... Para poder agregar datos a la tabla
-----------------------------------------------------------------------
LOAD DATA
INFILE '.CSVPersonas.csv' -- Archivo que contiene los datos a cargar
BADFILE '.BADPersonas.BAD' -- Archivo que tiene los registros malos
DISCARDFILE 'DSCPersonas.dsc' -- Archivo con registros descartados
INTO TABLE Prueba.Personas -- Nombre de la tabla
APPEND -- Para agregar datos a la tabla
fields terminated by ',' -- Terminación de los datos
optionally enclosed by '"' -- Parametro que indica que los datos opcionalmente estan encerrados entre "


( Codigo, -- Lo ingresa tal cual como es
Nombre "INITCAP(:nombre)", -- se puede utilizar : para hacer referencia al dato a cargar
Sexo filler, -- No lo considera
Nacimiento "to_date(:Nacimiento,'DD/MM/YYYY')" -- se puede utilizar sql en la carga de datos.
)



Falto especificar el contenido del .bat :)

sqlldr parfile=Personas.par
sqlldr parfile=Ciudades.par


Ojala que te sirva..

Chao