Re: Error en una funcion....

From: Juan <smalltalker(dot)marcelo(at)gmail(dot)com>
To: Anthony Sotolongo <asotolongo(at)gmail(dot)com>
Cc: MKHotmail <mcanchas(at)hotmail(dot)com>, Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Error en una funcion....
Date: 2016-04-06 16:25:08
Message-ID: CAKizN9wAALxiLGqMODQ1BbHUFZ9XERC7c2LOpUiKROSbmP=Avw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola gente

Para que quieres un valor de devolución ?
Si necesitas la tabla de resultado, porque no hacer dos funciones una que
actualiza la otra
que directamente devuelve el sertof?

no veo para que quieres que devuelva algo, mas bien parece un proceso batch
que no
devuelve .. o me equivoco?

saludos

jmdc

2016-04-06 12:23 GMT-03:00 Anthony Sotolongo <asotolongo(at)gmail(dot)com>:

> Que raro eso que existe y te da el error que no existe, probaste algunas
> de las otras opciones que te indique?
> las del casteo, tu_tipo, RETURNS TABLE?
>
> saludos
>
>
> On 06/04/16 12:17, MKHotmail wrote:
>
> La tabla si existe, de ahí tomo los datos.
>
> En realidad solo deseo hacer una función para tomar los datos de esa
> tabla(tbl_temporal) y pasarlas a productos; verificando previamente que no
> exista, de existir solo actualizarla.
>
>
>
> MK
>
>
>
> *De:* Anthony Sotolongo [mailto:asotolongo(at)gmail(dot)com
> <asotolongo(at)gmail(dot)com>]
> *Enviado el:* miércoles, 06 de abril de 2016 10:15 a.m.
> *Para:* MKHotmail <mcanchas(at)hotmail(dot)com> <mcanchas(at)hotmail(dot)com>;
> pgsql-es-ayuda(at)postgresql(dot)org
> *Asunto:* Re: [pgsql-es-ayuda] Error en una funcion....
>
>
>
> como dice el error, esa tabla no existe, te fijaste si existe?
>
> probaste el el otro modo haciendo el casteo?
>
> también puedes hacer un tipo de datos con los atributos que debe devolver
> tu resultado y defines a tu función como SETOF tu_tipo y también pueden
> usar RETURNS TABLE (att....) para devolver.
> como ves son varias opciones :D para resolver el tema, que bueno por
> PostgreSQL :D
>
> Saludos
>
> On 06/04/16 12:07, MKHotmail wrote:
>
> 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-owner(at)postgresql(dot)org [
> mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org
> <pgsql-es-ayuda-owner(at)postgresql(dot)org>] *En nombre de *Anthony Sotolongo
> *Enviado el:* miércoles, 06 de abril de 2016 10:02 a.m.
> *Para:* MKHotmail <mcanchas(at)hotmail(dot)com> <mcanchas(at)hotmail(dot)com>;
> pgsql-es-ayuda(at)postgresql(dot)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-owner(at)postgresql(dot)org [
> mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org
> <pgsql-es-ayuda-owner(at)postgresql(dot)org>] *En nombre de *Anthony Sotolongo
> *Enviado el:* miércoles, 06 de abril de 2016 09:55 a.m.
> *Para:* MKHotmail <mcanchas(at)hotmail(dot)com> <mcanchas(at)hotmail(dot)com>;
> pgsql-es-ayuda(at)postgresql(dot)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
>
>
>
>
>
>
>
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Francisco Olarte 2016-04-06 17:03:56 Re: permisos del directorio postgresql
Previous Message Hibiki 2016-04-06 15:48:54 Formato de consulta