Re: Ayuda para pasar resultados de una tabla en csv

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: Raw Message | Whole Thread | 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

In response to

Browse pgsql-es-ayuda by date

  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