Re: Error en una funcion....

From: Anthony Sotolongo <asotolongo(at)gmail(dot)com>
To: MKHotmail <mcanchas(at)hotmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Error en una funcion....
Date: 2016-04-06 15:23:55
Message-ID: 57052A0B.6040904@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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]
> *Enviado el:* miércoles, 06 de abril de 2016 10:15 a.m.
> *Para:* MKHotmail <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>
> [mailto: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>
> <mailto:mcanchas(at)hotmail(dot)com>; pgsql-es-ayuda(at)postgresql(dot)org
> <mailto: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>
> [mailto: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>
> <mailto:mcanchas(at)hotmail(dot)com>; pgsql-es-ayuda(at)postgresql(dot)org
> <mailto: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 Gerardo Herzig 2016-04-06 15:29:51 Re: Vista con pase de parámetros
Previous Message MKHotmail 2016-04-06 15:19:20 RE: Error en una funcion....