From: | mauricio pullabuestan <jmauriciopb(at)yahoo(dot)es> |
---|---|
To: | "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Error en una funcion.... |
Date: | 2016-04-07 13:04:13 |
Message-ID: | 1876857075.1568819.1460034253096.JavaMail.yahoo@mail.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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 <mcanchas(at)hotmail(dot)com> 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: 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>; 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] 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>; 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
From | Date | Subject | |
---|---|---|---|
Next Message | Miguel Beltran R. | 2016-04-07 15:01:33 | Re: [pgsql-es-ayuda] Adicionar sábados y domingos del mes en una planilla de asistencia |
Previous Message | Hellmuth Vargas | 2016-04-07 13:00:30 | Re: Mantenimiento a base de datos |