Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/11/2009, 13:06
khalim13
 
Fecha de Ingreso: septiembre-2009
Mensajes: 30
Antigüedad: 14 años, 7 meses
Puntos: 0
Exclamación Concatenar en un copy

Què tal amigos? Tengo la siguiente inquietud y espero que me puedan ayudar.

Estoy trabajando con una funcion en postgre. Uno de las instrucciones que cumple, es leer un archivo de texto plano llamado archivos_cargar.txt (usando el copy) y descargarlo en una tabla la que llamaremos nombres_archivos y que contiene un solo campo. El contenido de ese archivo, no es màs que la lista de los nombres de los archivos que se encuentran en equis direccion (la llamaremos prueba) y son con los que realmente debo trabajar.

Esto lo hago, porque los archivos que llegan a esa carpeta (prueba), llegan cada cierto tiempo y con nombres distintos asì como en cantidades variadas(puede llegar 1 solo archivo asì como pueden llegar 100), por lo cual la direcciòn para leer no puede ser estàtica.

Hice un .bat que me crea un archivo (archivos_cargar.txt) donde me guarda los nombres de todos los archivos de texto que se encuentren en la carpeta cada vez que se ejecute:

Entonces necesito hacer lo siguiente:

Leer el archivo "archivos_cargar.txt", vaciar la informaciòn en la tabla archivos_cargar ( esto es bastante sencillo usando el copy) y ya una vez allì, capturar el contenido de ese campo y guardarlo en una variable, ya que como les indiquè, en ese contenido, està el nombre del archivo con el que debo trabajar. Quisiera saber entonces, como agregar el contenido de ese campo a la direcciòn de un copy.

Los ilustro un poco con lo que quiero hacer:


CREATE OR REPLACE FUNCTION buscar_nombres (integer) RETURNS integer AS
$BODY$



DECLARE

param1 ALIAS FOR $1;
i integer;
nombre_archivo VARCHAR(100);
line record;

BEGIN

i := 0;

FOR line IN select * from "archivos_cargar" LOOP

/* obtener los campos */

nombre_archivo := substr(line.line,1,20);

/*ejecutar el copy*/

BEGIN

COPY prueba from 'd:/prueba/'; ??????

Despues de "prueba/" se supone que deberìa ir el contenido del campo que leì, para que asì, el copy busque ese archivo y actue. Pero no sè còmo hacerlo.


Intentè crear una variable de la siguiente forma "RUTA='d:/prueba/';" y otra llamada "BUSCAR" que serìa la concatenaciòn de ruta y nombre_archivo,
por lo que serìa algo asì:
"BUSCAR=RUTA || nombre_archivo;"

y el copy querìa asì:

COPY prueba from BUSCAR;

Quizà es una loquera, pero fue lo que se me ocurriò y lògicamente, pues no funciona :(

Tambièn intentè esto

COPY prueba from 'd:/prueba/' || nombre_archivo;

Lògicamente tampoco funcionò :(

Y ya de verdad no se me ocurrè màs nada, no sè si debo concatenar distinto, si lo estoy haciendo mal o si hay alguna otra forma de hacerlo, ya estoy super estancado allì.

Bueno, espero haber podido explicarme bien y haber podido plasmar lo que realmente deseo hacer en esta funciòn y les agradecerè muchìsimo cualquier ayuda que puedan darme.

Muchas gracias de antemano, saludos!