Oracle - información sobre SQL*Loader

 
Vista:

información sobre SQL*Loader

Publicado por Karina (53 intervenciones) el 18/09/2005 19:18:54
Hola por favor alguien que sepa de un buen ejemplo del SQL*Loader(manual o tutorial), es que tengo que copiar datos copiados de una BD a un fichero plano y de allí cargarlo a otra BD y quisiera saber bien el funcionamiento de este utilitario (que ya he leído algunas cosas pero no termino de hacer un ejemplo fácil): he creado una tabla simple he hecho el fichero de control ctl y uno de datos que coincide con la estructura de la tabla y por supuesto del fichero, sin embargo al poner una sentencia en una consola DOS parecida a esto:
sqlload usuario/password CONTROL=fichero_de_Control.ctl, DATA=fichero_de_datos.dat ,
me da un error y sale que el comando no se reconoce,

es que tengo que instalar un utilitario especial desde el instaladora de oracle 8.1? o qué estoy haciendo mal. Que opciones tengo con este utilitario y si hay alguno mejor que este, si alguien lo sabe.

Muchas gracias por vuestra información,

Karina
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:información sobre SQL*Loader

Publicado por Ube (1 intervención) el 31/01/2007 18:13:22
Hola,

Yo tb, estoy viendo ese tema y en Internet encontre esto..quizas te ayude...

Manual de Oracle
Oracle Bulk Loader

-Creación del archivo de control
-Usando un archivo de datos separado
-Representación de fechas
-Manejo de valores nulos
-Cargando los datos
-Creación del archivo de control

Hay dos formas de usar los archivos de control.
A. Datos cargados desde el archivo de control
Probablemente el tipo de archivo de control mas sencillo es como el siguiente, donde los datos a ser cargados se encuentran al final del archivo de control. Las letras mayúsculas son opcionales.

LOAD DATA
INFILE *
INTO TABLE test
FIELDS TERMINATED BY ','
(num,name)
BEGINDATA
1,foo
2, bar
3,baz
4,glorp
5,snarf

El proposito de este archivo es cargar datos en una relación llamada test, la cual tiene dos atributos: num y name,de tipo NUMBER y CHAR(10), respectivamente. El significado de cada una de las líneas (en el orden que aparecen) es:

LOAD DATA se requiere esta línea al principio del archivo de control.
INFILE * indica que los datos aparecerán en el mismo archivo, y no en uno separado, en cuyo caso el nombre del archivo reemplazaría a *.

La inserción se efectuará en la relación llamada test. La tabla que recibirá los datos debe existir en la base de datos. Mas aún, la tabla debe estar vacía. De no cumplirse esto último, debe usarse "APPEND INTO TABLE test" en lugar de "INTO TABLE test".
El separador de valores de diferentes atributos será una coma.
BEGIN DATA indica que en las líneas siguientes aparecerán las tuplas a ser insertadas.
La primera tupla tiene num=1 y name='foo'
Los nombres de las columnas a ser insertadas aparecen entre paréntesis, y separados por coma.
Observación: Un error común es asumir que los espacios en blanco son ignorados en el archivo de carga, tal como sucede en casi todos los lenguajes de programación. Este error podría producir resultados inesperados al momento de efectuar consultas sobre los datos insertados.

Notese que en las segunda tupla insertada aparece un espacio en blanco entre la coma y el nombre bar. Esto producirá como resultado que se almacene la tupla (2, ' bar') en lugar de la tupla (2, 'bar'), por locual, al hacer una consulta donde nombre='bar', nunca se obtendría dicha tupla.

B. Datos cargados desde un archivo separado
Se pueden colocar los datos a ser cargados en un archivo distinto al archivo de control. He aquí un ejemplo sencillo:

LOAD DATA
INFILE 'test.txt'
APPEND INTO TABLE test
FIELDS TERMINATED BY ','
(num,name)

A continuación, el significado de cada una de las líneas:
LOAD DATA: se requiere esta línea al principio del archivo de control.
INFILE test.txt indica que los datos aparecerán en el archivo test.txt.
Los datos en test.txt será añadidos al final de la relación test. De no aparecer la palabra APPEND, la relación test debe estar vacía.
En el archivo de datos, se usará la coma como separador de atributos.
Los nombres de las columnas aparecen entre paréntesis, y separados por coma.
El contenido del archivo de datos test.txt es:
1,foo
2, bar
3,baz
4,glorp
5,snarf

Representación de fechas
El tipo de datos DATE es representado en un formato que brinda considerable flexibilidad. Primero, debe declararse la tabla con un atributo de tipo DATE. He aquí un ejemplo sencillo:
CREATE TABLE Foo (
i NUMBER,
d DATE
);

Ahora, en el archivo de control, al describir los atributos de la tabla a ser cargada, puede acompañarse cada nombre de atributo con su tipo. Aún cuando esto puede hacerse para todos los atributos, en el siguiente ejemplo se hará solo para el atributo de fecha (d).

En el ejemplo tenemos, seguido del indicador de tipo DATE, una máscara de fecha que describe el formato que va a tener la fecha en los datos de entrada. La máscara de fecha es una cadena de caracteres, encerrada con comillas dobles, que debe seguir las siguientes convenciones:

Las secuencias de letras que comiencen con d, m o y, denotan campos en los datos que deben ser interpretados como dias, meses y años, respectivamente. Como casi todo en SQL, se permiten letras mayúsculas.
Todos los demás caracteres son tratados literalmente, y deben aparecer en los datos, si fueron colocados en la máscara.
Los campos usados representan longitud maxima para los valores correspondientes.
He aquí un ejemplo de un archivo de carga:

LOAD DATA
INFILE *
INTO TABLE Foo
FIELDS TERMINATED BY ','
(i,d DATE "dd-mm-yyyy")
BEGINDATA
1,01-02-1234
2,3-4-1997

Notese que, en la segunda tupla de datos, se tiene un campo de longitud menor a la indicada en la máscara. El separador - le indica al programa que los campos dia y mes para la segunda tupla son mas cortos.

Manejo de valores nulos
Para la inserción de valores nulos, debe dejarse vacío el espacio correspondiente al valor. Por ejemplo, si quisieramos hacer la carga en una tabla empleado de los siguientes datos:

(12234765,'Freedy Arias',30-10-1997,120000.00)
(14236879,'Jose Montenegro',12-08-1997,75535.00)
(12234765,'Pedro Perez',NULL,100000,00)
(12234765,'Carolina Rodriguez',30-10-1997,98000.00)

se tendría que usar el siguiente archivo de control:

LOAD DATA
INFILE *
INTO TABLE empleado
FIELDS TERMINATED BY ','
(ci,nombre,ult_vacaciones DATE "dd-mm-yyyy",sueldo)
BEGINDATA
12234765,Freedy Arias,30-10-1997,120000.00
14236879,Jose Montenegro,12-08-1997,75535.00
12234765,Pedro Perez,,100000,00)
12234765,Carolina Rodriguez,30-10-1997,98000.00

Uso del Loader para la carga de datos
sqlload es un comando a nivel de UNIX, igual que sqlplus. La forma de una línea de comandos es:

sqlload userid=<yourName>/<yourPasswd> control=<ctlFile> log=<logFile>

La sintaxis de los parámetros no es la usual en UNIX. Se debe colocar la palabra userid con un signo de igual, el login (de sqlplus), un slash, y el password de sqlplus. Si se omite el parámetro userid, el sistema preguntará por el login y el password.

A continuación debe indicarse el nombre del archivo de control. Por último se debe indicar el nombre de otro archivo, el archivo de log, en el cual sqlload coloca cierta información de utilidad acerca de lo que hizo, incluyendo una descripción de los erores que hubieran ocurrido durante la ejecución. Por ejemplo, si el usuario CURSO00, con password prof%01 quisiera cargar los datos que se indican en carga.ctrl y obtener el resultado en carga.log, debería usar:

sqlload userid=CURSO00/prof%01 control=carga.ctrl log=carga.log



Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar