| From: | Anthony Sotolongo <asotolongo(at)gmail(dot)com> | 
|---|---|
| To: | Cristobal Alexis Ibarra Gonzalez <cristobaal(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org | 
| Subject: | Re: Ayuda para pasar resultados de una tabla en csv | 
| Date: | 2016-02-25 20:36:42 | 
| Message-ID: | 56CF65DA.3080409@gmail.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-es-ayuda | 
Hola Cristobal, al parecer dentro del COPY no se ve el parámetro de la 
función, la verdad no se el motivo :(
para enfrentar el tema tuve que crear una tabla temporal con el 
resultado de la consulta y luego dentro de COPY llamo a la tabla, algo 
como(utilice una BD de prueba que tengo aqui para ve si funcionaba):
-- Function: fn_normalizardireccion(character varying)
-- DROP FUNCTION fn_normalizardireccion(character varying);
CREATE OR REPLACE FUNCTION fn_normalizardireccion(var_lote character 
varying)
   RETURNS void AS
$BODY$
DECLARE
temp  text;
BEGIN
/*Insertar los datos de la tabla Direcciones_TMP hacia la tabla 
direcciones*/
--SET client_encoding TO LATIN1;
DROP TABLE IF EXISTS temporal;
CREATE temp table temporal as
SELECT  title,actor,price
     FROM     products  LEFT JOIN categories
                  USING(category)
WHERE categoryname = $1 ORDER BY 1;
COPY ( select * from temporal
) TO '/tmp/Archivo.csv' WITH CSV HEADER;
DROP TABLE IF EXISTS temporal;
END;
$BODY$
   LANGUAGE plpgsql VOLATILE
   COST 100;
ALTER FUNCTION fn_normalizardireccion(character varying)
   OWNER TO postgres;
tal vez no sea lo mejor....
Saludos
On 25/02/16 17:04, Cristobal Alexis Ibarra Gonzalez wrote:
> Ahí va
>
> CREATE OR REPLACE FUNCTION fn_normalizardireccion(Var_lote VARCHAR)
> RETURNS void AS $$
> DECLARE
>
> BEGIN
>
> /*Insertar los datos de la tabla Direcciones_TMP hacia la tabla 
> direcciones*/
>
> INSERT INTO DIRECCIONES( DIRECCION, COMUNA, LOTE)
> SELECT DIRECCION
> ,COMUNA
> ,LOTE
> FROM DIRECCIONES_TMP WHERE LOTE = Var_lote;
>
> --SET client_encoding TO LATIN1;
>
> COPY (
> SELECT  DISTINCT
> DN.ID_DIRECCIONES
> ,DN.LOTE
> ,DN.DIRECCION_COPIA
> ,DN.CALLE
> ,DN.NUMERAL
> ,DN.RESTO
> ,DN.COMUNA
> ,CAST(MD.UTM_NORTE as numeric) AS UTM_NORTE
> ,CAST(MD.UTM_ESTE as numeric) AS UTM_NORTE
> FROM DIRECCIONESNORMALIZADA AS DN LEFT JOIN
> MaestroDirecciones AS MD ON DN.COMUNA=MD.COMUNA AND DN.CALLE=MD.CALLE 
> AND DN.NUMERAL=MD.NUMERO
> WHERE LOTE = $1 ORDER BY DN.ID_DIRECCIONES
> )  TO '/home/user/Archivo.csv'  WITH CSV HEADER;
>
> END;
> $$ LANGUAGE plpgsql;
>
> El 25 de febrero de 2016, 17:01, Anthony Sotolongo 
> <asotolongo(at)gmail(dot)com <mailto:asotolongo(at)gmail(dot)com>> escribió:
>
>     ese error significa "undefined_column". , puedes adjuntar el
>     código de la función?
>
>     saludos
>
>
>     On 25/02/16 16:59, Cristobal Alexis Ibarra Gonzalez wrote:
>>     Probe ingresando y el error fue el mismo.
>>
>>     WHERE DN.x3= *$1 *ORDER BY DN.X7
>>
>>     ********** Error **********
>>
>>
>>     SQL state: 42703
>>
>>     El 25 de febrero de 2016, 16:53, Anthony Sotolongo
>>     <asotolongo(at)gmail(dot)com <mailto:asotolongo(at)gmail(dot)com>> escribió:
>>
>>         Hola Cristobal, que problema te da? error,cual?, no guarda en
>>         el CSV? has probado utilizar $N(N=numero del parámetro en la
>>         función) en vez del nombre de la variable
>>
>>
>>         Saludos
>>
>>         On 25/02/16 16:42, Cristobal Alexis Ibarra Gonzalez wrote:
>>>         Estimados,
>>>
>>>         Buenas tardes, les escribo porque quisiera saber si me
>>>         pueden ayudar con lo siguiente:
>>>
>>>         He creado una función que a la cual se le entrega un
>>>         parámetro de entrada de tipo Varchar.
>>>
>>>         Al final de todo lo que realizo deseo pasar el resultado de
>>>         una query a un archivo csv, cuando ejecuto la sentencia
>>>         fuera de la función esta hace todo de manera perfecta, el
>>>         problema que tengo sucede cuando va dentro de la función y
>>>         principalmente creo que lo hace por la variable que estoy
>>>         usando.
>>>
>>>         SET client_encoding TO LATIN1;
>>>
>>>         COPY (
>>>         SELECT   DISTINCT
>>>         DN.x1
>>>         ,DN.x2
>>>         ,DN.x3
>>>         ,DN.x4
>>>         ,DN.x5
>>>         ,DN.x6
>>>         ,DN.x7
>>>         ,CAST(MD.x8as numeric) AS x9
>>>         ,CAST(MD.x9as numeric) AS x9
>>>         FROM TABLA1 AS DN LEFT JOIN
>>>         TABLA2 AS MD ON DN.COMUNA=MD.COMUNA AND DN.CALLE=MD.CALLE
>>>         AND DN.NUMERAL=MD.NUMERO
>>>         WHERE LOTE =**Var_lote   ORDER BY DN.ID_DIRECCIONES
>>>         WHERE DN.x3= *Var_lote *ORDER BY DN.X7
>>>
>>>         Donde Var_lote es la variable que le entrego a la función
>>>         para que esta se ejecute. Personalmente creo que el problema
>>>         esta en el
>>>
>>>         WHERE DN.x3= Var_lote   ORDER BY DN.X7
>>>
>>>         Esto porque si yo agrego un string y saco la variable esta
>>>         funciona adecuadamente en la función.  WHERE DN.x3=
>>>         'ejemplo1234'   ORDER BY DN.X7
>>>
>>>         -- 
>>>         Con respeto y cariño,
>>>
>>>
>>>         Atentamente
>>>         Cristóbal Ibarra González
>>
>>
>>
>>
>>     -- 
>>     Con respeto, admiración y cariño,
>>
>>
>>     Atentamente
>>     Cristóbal Ibarra González
>
>
>
>
> -- 
> Con respeto, admiración y cariño,
>
>
> Atentamente
> Cristóbal Ibarra González
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Hellmuth Vargas | 2016-02-25 20:55:13 | Re: Constraint Check de varios campos en varias combinaciones | 
| Previous Message | Cristobal Alexis Ibarra Gonzalez | 2016-02-25 20:04:42 | Re: Ayuda para pasar resultados de una tabla en csv |