|
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
ir a siguiente capitulo
|