El desconocido campo Boundfiller de SQL*Loader
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 " ) |