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.
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
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
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.
(comunes)
Para mas información : oracle
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))" )