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