Hola nuevamente, sigo con mis consultas...
Tenía que transformar distintos tipos de archivos a txt, eliminando caracteres especiales, cosa que hice línea a línea, leyendo el archivo txt, pero el resultado final de ese proceso es lento (1.000 registros por minuto), por lo que he tenido que mejorar.
Lo primero que hice fue leer todo el archivo y quitar ciertos caracteres no deseados.
open $DATOS, '<', $file_name or die "ERROR: No puedo leer el fichero $file_name: $!\n";
local $/;
my $archivo_completo = <$DATOS>;
close $DATOS;
$archivo_completo = quita_acentos($archivo_completo); # sustituye letras acentuadas por la no acentuada
$archivo_completo = elimina_caracteres($archivo_completo); # para quitar caracteres no deseados
open $ARCHIVO, '>', "$file_name" or die "ERROR: No puedo escribir en el archivo $file_name: $!\n";
print $ARCHIVO $archivo_completo; # ¡Pum!
close $ARCHIVO;
Luego de esto, lo que quiero hacer es una carga masiva a una tabla de la BD.
Lo que yo voy a insertar en la tabla es toda la línea del archivo txt limpio, más otras dos columnas que son variables.
Mi tabla consta de tres columnas:
id -> identificador del registro, obtenido por una secuencia
id_archivo -> que identificará que todas estas líneas pertenecen a este archivo que estoy insertando, lo que debiera pasarle como parámetro
trama-> que es todo el contenido de la línea del archivo.txt
Según el ejemplo en cpan.org:
my $flldr = new Oracle::SQLLoader(
infile => 'archivo.txt',
username => 'usuario',
password => 'password',
);
$flldr->addTable(table_name => 'tabla');
$flldr->addColumn(column_name => 'id',
column_type => $INT);
$flldr->addColumn(column_name => 'id_archivo',
column_type => $INT);
$flldr->addColumn(column_name => 'trama',
field_offset => 0,
field_end => 2000,
column_type => $CHAR);
$flldr->executeLoader() || warn "Problem executing sqlldr: $@\n";
¿En qué momento le digo que la columna id debe tomar la secuencia_id.nextval?
y ¿en qué momento le digo a id_archivo que es una variable $id_archivo?
Como siempre, muchas gracias.