Primero, tienes una tabla como esta en tu base de datos:
SQL> describe my_table
Name Null? Type
----------------------------------------- -------- ----------------------------
SOMEDATE DATE
FIELD1 VARCHAR2(256)
FIELD2 VARCHAR2(256)
Y quieres cargar datos como estos de archivos de texto plano:
08/10/2011|00:09:52|Some data|THRHTRDHF
08/15/2011|00:10:57|More data|NLHIJKUYJ
08/22/2011|00:11:00|This data|XEFGRGCG
08/26/2011|00:12:27|A lot of data|TVGT
Primero tienes que escribir un pequeño archivo de control para sqlldr, algo como esto:
LOAD DATA
APPEND
INTO TABLE my_table
FIELDS TERMINATED BY "|" TRAILING NULLCOLS
(
SOMEDATE "to_date(:SOMEDATE, 'MM/DD/YYYY HH24:MI:SS')",
FIELD1 ,
FIELD2
)
Aquí dices que quieres agregar datos a my_table, separados por |, y conviertes la fecha encontrada en los archivos de texto con la función to_date. Pero espera! Podrías haber notado que hay cuatro campos por línea y solo tres campos en la tabla; necesitas hacer un formateo básico de los archivos de texto antes de cargarlos con sqlldr.
Con este pequeño script el formateo y cargado de archivos es automatizado, y sólo necesitas ejecutarlo con el nombre del archivo de texto como parámetro para cargar el archivo:
conn="myuser/mypass@orcl"
cd /mydir/myloader
mknod loader.pipe p
cat $1|sed 's/|/ /' > loader.pipe &
sqlldr $conn skip=0 errors=999999999 data=loader.pipe control=loader.ctl log=loader.log bad=loader.bad
wait
rm loader.pipe
De esta forma colocas el script de cargado en /mydir/myloader, y el script crea una tubería nombrada para alimentar sqlldr con los datos formateados de sed como se ve a continuación:
08/10/2011 00:09:52|Some data|THRHTRDHF
08/15/2011 00:10:57|More data|NLHIJKUYJ
08/22/2011 00:11:00|This data|XEFGRGCG
08/26/2011 00:12:27|A lot of data|TVGT
Con un script puedes descomprimir archivos al vuelo o hacer transformaciones más complejas de archivos de texto antes de cargarlos, y en este caso le estás diciendo a sqlldr que cargue tantos registros como pueda ignorando errores (errors=999999999) y que escriba los registros malos a un archivo (bad=loader.bad).
Finalmente, correr este script se ve como esto:
oracle@myserver:~$ /mydir/myloader/loader /otherdir/file.txt
SQL*Loader: Release 11.1.0.7.0 - Production on Mon Sep 19 11:33:03 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Commit point reached - logical record count 4
Más información:
SQL*Loader FAQ
SQL*Loader Command-Line Reference
No hay comentarios.:
Publicar un comentario