From: | MKHotmail <mcanchas(at)hotmail(dot)com> |
---|---|
To: | "'Anthony Sotolongo'" <asotolongo(at)gmail(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RE: Error en una funcion.... |
Date: | 2016-04-06 15:19:20 |
Message-ID: | DUB405-EAS431EFB7CE5E17EAA0C3D7A2D79F0@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Estab bien, habia escrito mal la tabla
Gracias
MK
De: 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: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 <mailto:mcanchas(at)hotmail(dot)com> <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 <mailto:mcanchas(at)hotmail(dot)com> <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 :)
Gracias
MK
From | Date | Subject | |
---|---|---|---|
Next Message | Anthony Sotolongo | 2016-04-06 15:23:55 | Re: Error en una funcion.... |
Previous Message | MKHotmail | 2016-04-06 15:17:41 | RE: Error en una funcion.... |