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 <[email protected]>
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: [email protected]
[mailto:[email protected]] En nombre de Anthony Sotolongo
Enviado el: miércoles, 06 de abril de 2016 10:02 a.m.
Para: MKHotmail <[email protected]>; [email protected]
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:
[email protected]
[mailto:[email protected]] En nombre de Anthony Sotolongo
Enviado el: miércoles, 06 de abril de 2016 09:55 a.m.
Para: MKHotmail <[email protected]>; [email protected]
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