Lo cambie por Y me manda un error : Microsoft OLE DB Provider for ODBC Drivers : ERROR: no existe el tipo «tlb_temporal»;
Error while executing the query CREATE OR REPLACE FUNCTION public.grabar_importaciones() RETURNS SETOF "tlb_temporal" AS $BODY$ DECLARE r RECORD; cuenta INTEGER; BEGIN FOR r IN select * from tbl_temporal LOOP SELECT INTO cuenta count(*) FROM productos where idproducto = r.idproducto ; IF cuenta > 0 THEN UPDATE productos SET nombre_producto = r.nombre_producto, idfamilia = r.idfamilia, idsubfamilia = r.idsubfamilia Where idproducto = r.idproducto ; ELSE INSERT INTO productos(idproducto, nombre_producto, idfamilia, idsubfamilia) Values(r.idproducto, r.nombre_producto, r.idfamilia, r.idsubfamilia); END IF ; return next r ; END LOOP; return ; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; De: pgsql-es-ayuda-ow...@postgresql.org [mailto:pgsql-es-ayuda-ow...@postgresql.org] En nombre de Anthony Sotolongo Enviado el: miércoles, 06 de abril de 2016 10:02 a.m. Para: MKHotmail <mcanc...@hotmail.com>; pgsql-es-ayuda@postgresql.org Asunto: Re: [pgsql-es-ayuda] Error en una funcion.... Esa función devuelve un record por ende tienes que castear tu resultado, deberías llamarla con algo como esto: Select * from public.grabar_importaciones() as (att tipo,...); donde (att tipo,...) son los atributos de la tabla tbl_temporal también puedes definir el returns de tu tabla como SETOF "tlb_temporal" y te ahorras el casteo Saludos On 06/04/16 11:56, MKHotmail wrote: Select public.grabar_importaciones() ; MK De: pgsql-es-ayuda-ow...@postgresql.org <mailto:pgsql-es-ayuda-ow...@postgresql.org> [mailto:pgsql-es-ayuda-ow...@postgresql.org] En nombre de Anthony Sotolongo Enviado el: miércoles, 06 de abril de 2016 09:55 a.m. Para: MKHotmail <mailto:mcanc...@hotmail.com> <mcanc...@hotmail.com>; pgsql-es-ayuda@postgresql.org <mailto:pgsql-es-ayuda@postgresql.org> Asunto: Re: [pgsql-es-ayuda] Error en una funcion.... Hola, como estas llamando a esa función? On 06/04/16 11:49, MKHotmail wrote: Buenos días, estoy haciendo una función simple y me arroja este error : Microsoft OLE DB Provider for ODBC Drivers : ERROR: se llamó una función que retorna un conjunto en un contexto que no puede aceptarlo; Error while executing the query Mi función es esta : solo es pasar la información importada de una tabla a la de producción(si existe actualiza sino lo agrega..) : CREATE OR REPLACE FUNCTION public.grabar_importaciones() RETURNS SETOF "record" AS $BODY$ DECLARE r RECORD; cuenta INTEGER; BEGIN FOR r IN select * from tbl_temporal LOOP SELECT INTO cuenta count(*) FROM productos where idproducto = r.idproducto ; IF cuenta > 0 THEN UPDATE productos SET nombre_producto = r.nombre_producto, idfamilia = r.idfamilia, idsubfamilia = r.idsubfamilia Where idproducto = r.idproducto ; ELSE INSERT INTO productos(idproducto, nombre_producto, idfamilia, idsubfamilia) Values(r.idproducto, r.nombre_producto, r.idfamilia, r.idsubfamilia); END IF ; return next r ; END LOOP; return; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; Podrian indicarme por donde va mi espantoso error :) Gracias MK