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 <asotolo...@gmail.com <mailto:asotolo...@gmail.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
    <asotolo...@gmail.com <mailto:asotolo...@gmail.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

Responder a