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

 

 

Responder a