Hola MK.
Primero cambiaría la funcion

CREATE OR REPLACE FUNCTION public.grabar_importaciones()RETURNS void 
AS$BODY$BEGIN
UPDATE productos p SET nombre_producto = r.nombre_producto,      idfamilia      
 = r.idfamilia,      idsubfamilia    = r.idsubfamilia FROM tbl_temporal r  
Where p.idproducto = r.idproducto ;
INSERT INTO productos(idproducto, nombre_producto, idfamilia, idsubfamilia) 
Select r.idproducto, r.nombre_producto, r.idfamilia, r.idsubfamilia 
 From tbl_temporal r LEFT JOIN       productos p USING(idproducto)  Where 
p.idproducto IS NULL;
END;
$BODY$LANGUAGE 'plpgsql' VOLATILE;
Ahora prueba con:Perform * public.grabar_importaciones()

Saludos.Mauricio 

    El Miércoles 6 de abril de 2016 10:08, MKHotmail <mcanc...@hotmail.com> 
escribió:
 

 #yiv0855783965 #yiv0855783965 -- _filtered #yiv0855783965 
{font-family:Wingdings;panose-1:5 0 0 0 0 0 0 0 0 0;} _filtered #yiv0855783965 
{panose-1:2 4 5 3 5 4 6 3 2 4;} _filtered #yiv0855783965 
{font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4;}#yiv0855783965 
#yiv0855783965 p.yiv0855783965MsoNormal, #yiv0855783965 
li.yiv0855783965MsoNormal, #yiv0855783965 div.yiv0855783965MsoNormal 
{margin:0cm;margin-bottom:.0001pt;font-size:11.0pt;color:black;}#yiv0855783965 
a:link, #yiv0855783965 span.yiv0855783965MsoHyperlink 
{color:#0563C1;text-decoration:underline;}#yiv0855783965 a:visited, 
#yiv0855783965 span.yiv0855783965MsoHyperlinkFollowed 
{color:#954F72;text-decoration:underline;}#yiv0855783965 
span.yiv0855783965EstiloCorreo17 {color:windowtext;}#yiv0855783965 
span.yiv0855783965EstiloCorreo18 {color:#1F497D;}#yiv0855783965 
span.yiv0855783965EstiloCorreo19 {color:#1F497D;}#yiv0855783965 
.yiv0855783965MsoChpDefault {font-size:10.0pt;} _filtered #yiv0855783965 
{margin:70.85pt 3.0cm 70.85pt 3.0cm;}#yiv0855783965 
div.yiv0855783965WordSection1 {}#yiv0855783965 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] 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
 
  

  

Responder a