SQL LOADER

Sql Loader es una utilidad que proporciona Oracle para cargar datos a una base de datos desde un fichero externo, normalmente un fichero de texto aunque tambien pueden ser ficheros binarios.

Al SQLLoader ( sqlldr) se le pasan como parametros (los más importanes) el fichero que contiene los datos que se van a cargar y la ruta del fichero de control que contiene las acciones a realizar. El formato de los datos, donde se cargaran y cualquier otro tipo de control.

SYNTAXIS

sqlldr userid=USUARIO/CONTRASEÑA@BASE control=/RUTA/DEL/FICHERO/DE/CONTROL data=/RUTA/DEL/FICHERO/QUE/CONTIENE/LOS/DATOS log=/LO/MISMO bad=/A/DONDE/VAN/LOS/DATOS/MALOS discard=/A/DONDE/VAN/LOS/DATOS/DESCARTADOS 

EJEMPLO

sqlldr userid=jj/contraseña@sistema control=/HOME/ctl/a.ctl data=/HOME/jj/tmp/a.txt

Como puedes ver no es muy complicado. Simplemente te conectas con un usuario de la base de datos y le dices cual es el fichero de texto que contiene la información y cual es el que contiene las especificacionse sobre lo que se va a hacer con esa información

Parámetros Comunes

  • userid=USUARIO/CONTRASEÑA@BASE Usuario, contraseña e instancia a la que te conectas.
  • control Ruta del archivo de control que contiene las directivas de lo que se va a hacer.
  • data Ruta del archivo que contiene los datos.
  • log Ruta del archivo donde quieres que se genere el log.
  • discard Ruta del archivo donde quieres que te envíe los registros descartados y no cargados.
  • bad Ruta del fichero donde van a parar los registros malos.

Archivo de Control

El archivo de control ( Control file en bárbaro ) es donde se especifica cómo se van a cargar los datos. Normalmente suele responder al siguiente esquema:

LOAD DATA
BADFILE '/a/donde/van/los/datos/malos'
DISCARDFILE '/a/donde/van/los/datos/descartados'
INFILE '/la/ruta/del/archivo/desde/el/que/se/cargan/los/datos'
APPEND 
INTO TABLE TU_TABLA_DE_DESTINO
FIELDS TERMINATED BY "|" OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
CAMPO0 POSITION(1:15),
CAMPO1 CHAR "ltrim(rtrim(:CAMPO1))",  
CAMPO2 CHAR "ltrim(rtrim(:CAMPO2))",
CAMPO3NUMERICO INTEGER EXTERNAL,
CAMPO4FECHA DATE "DD-Month-YY"
)

Como ves, si los campos tienen una longitud fija puedes especificarle las posiciones, desde el caracter 1 a la 15 y sucesivamente. O si no, puedes dejar que oracle interprete los campos y los inserte. En este caso está introduciondo datos APPEND al final de la tabla. ( Podria ser REPLACE para que reemplazara datos preexistentes). Como puedes imaginar por defecto cada linea es una fila. Y en este ejemplo cada campo está delimitado por el carácter |. TRAILING NULLCOLS sirve para que interprete que los campos sin contenido sean interpretados como NULOS.

Tipos de datos

(comunes)

  • CHAR
  • VARCHAR
  • VARCHARC
  • DATE
  • EXTERNAL numerics (INTEGER, FLOAT, DECIMAL, and ZONED)

Para mas información : oracle

Sql Loader y problemas con fechas

Si estas cargando datos con fechas es posible que te cause problemas al intentar insertar columnas con fechas y campos nulos. Una manera de evitarlo es borrar los caracteres en blanco del campo de fecha. Siguiendo el patron:

campo_de_fecha "to_date (ltrim(rtrim(:campo_de_fecha)), 'yyyy-mm-dd hh24:mi')"

Te dejo un ejemplo:

LOAD DATA
APPEND
INTO TABLE art
FIELDS TERMINATED BY "|"
TRAILING NULLCOLS
(
ART_CODE   char "ltrim(rtrim(:ART_CODE))",
DESCRIPTION char "ltrim(rtrim(:DESCRIPTION))",
DATOUV "to_date (ltrim(rtrim(:DATOUV)), 'DD-Month-YY')",
DATPEREMPTION "to_date (ltrim(rtrim(:DATPEREMPTION)), 'DD-Month-YY')",
UNIT char "ltrim(rtrim(:UNIT))",
FRNS char "ltrim(rtrim(:FRNS))"
)