El desconocido campo Boundfiller de SQL*Loader

Saturday, July 16, 2011 15:02
Posted in category Oracle, Programación

Durante estos días me he vuelto a pelear con la herramienta SQL*Loader y os traigo un truquito que os puede ser muy útil y del cual he visto poca documentación.
Necesitaba concatenar varias columnas de un CSV en un único campo de una tabla. Una opción válida podría ser cargar todos las columnas del CSV y en otro campo más de la tabla realizar la concatenación, pero necesitaba no cargar más que un único campo con la concatenación de otras columnas del CSV.

Os expongo el caso con un ejemplo:

Imaginemos un fichero CSV con 2 columnas A  (nombre de clientes) y B (apellidos de los clientes)  y una tabla TABLA_CLIENTES con un campo VARCHAR2 denominado NOMBRE_Y_APELLIDOS.

La solución pasa por utilizar en el CTL un campo declarado como BOUNDFILLER, que es similar a un campo FILLER, pero que difiere de éste en que pueden ser utilizados en expresiones SQL, ya que SQL*Loader reservar espacios para ellos en el momento del “bind array“.

Para cargar el CSV en la tabla TABLA_CLIENTES utilizariamos el siguiente CTL o fichero de control:

LOAD DATA
CHARACTERSET WE8ISO8859P1
APPEND INTO TABLE TABLA_CLIENTES
 
FIELDS
TERMINATED BY ";"
 
TRAILING NULLCOLS
 
(
 
A BOUNDFILLER,
B BOUNDFILLER,
NOMBRE_Y_APELLIDOS EXPRESSION ":A || :B "
 
)
You can leave a response, or trackback from your own site.

Leave a Reply