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] *En nombre de *Anthony
Sotolongo
*Enviado el:* miércoles, 06 de abril de 2016 09:55 a.m.
*Para:* MKHotmail <mcanc...@hotmail.com>; 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 J
Gracias
MK