Anthony anthony tenias razon al cambiar a before funciona la asignacion del new pero al requerir un after entonces hice la actualizacion del campo con update y quedo funcionando gracias
El jue., 15 nov. 2018 a las 9:00, jvenegasperu (<jvenegasp...@gmail.com>) escribió: > Hola Antony > Buen dia ok > > cambie el trigger a before y cuando le asigno un valor directamente si lo > hace sin embargo cuando trato de asignarle valor desde el resultado de la > consulta no funciona a que podria deberse. > > --Cambiando a BEFORE esto funciona > NEW.total := 1000; > > Pero esto no > select into r2 sum(ml_lineales) from padron_limpieza7 where limpieza_id = > NEW.gid; > NEW.total := r2.sum; > > tambien intente asi > NEW.total := (select sum(ml_lineales) from padron_limpieza7 where > limpieza_id = NEW.gid); > > pero no esta funcionando a que podria deberse > > > > > > > > > > El mié., 14 nov. 2018 a las 13:17, Anthony Sotolongo (< > asotolo...@gmail.com>) escribió: > >> Hola José, estás seguro que el trigger debe ser AFTER? Pues para que >> funcione el nuevo valor del NEW debe ser en un BEFORE. >> >> >> Saludos >> >> El mié., 14 de nov. de 2018 3:06 p.m., jvenegasperu < >> jvenegasp...@gmail.com> escribió: >> >>> Buen dia a todos >>> tengo un trigger sobre una tabla que llame limpieza_colector este >>> funciona bien excepto la ultima instruccion aqui el codigo >>> >>> CREATE TRIGGER limpieza3 >>> AFTER INSERT OR UPDATE >>> ON public.limpieza_colector >>> FOR EACH ROW >>> EXECUTE PROCEDURE public.limpieza3(); >>> >>> CREATE OR REPLACE FUNCTION public.limpieza3() >>> RETURNS trigger AS >>> $BODY$ >>> DECLARE >>> tot numeric(7,2); >>> r record; >>> r2 record; >>> i float; >>> BEGIN >>> >>> >>> select into r radio_influencia from limpieza_colector where gid = >>> NEW.gid; >>> >>> i:= r.radio_influencia; >>> >>> --create temp table tabb as >>> truncate opl_tabb; >>> insert into opl_tabb(row_number,gid,st_centroid,b) >>> select >>> v.row_number, >>> l.gid,st_centroid(st_intersection(v.the_geom,st_buffer(l.the_geom,i))), >>> st_distance(st_centroid(st_intersection(v.the_geom,st_buffer(l.the_geom,i))),st_startpoint(st_linemerge(v.the_geom))) >>> as b >>> from al_buzon_geo l join >>> opl_taba v on st_intersects(v.the_geom,st_buffer(l.the_geom,i)) and >>> st_buffer(v.the_geom,i+1) && l.the_geom; >>> >>> --aqui un serie de consultas en otras tablas >>> >>> --forma 1 >>> select into r2 sum(ml_lineales) tot from padron_limpieza7 where >>> limpieza_id = NEW.gid; >>> NEW.total := r2.tot; >>> >>> --forma 2 >>> NEW.total := (select sum(ml_lineales) from padron_limpieza7 where >>> limpieza_id = NEW.gid); >>> >>> --forma 3 >>> NEW.total := 1000; >>> >>> RETURN NEW; >>> END; >>> $BODY$ >>> LANGUAGE plpgsql VOLATILE >>> COST 100; >>> ALTER FUNCTION public.limpieza3() >>> OWNER TO postgres; >>> >>> El hecho es que he intentado actualizar el campo total de las 3 formas >>> que se ven en el codigo el trigger es bastante largo hago una serie de >>> consultas en otras tablas y actualizaciones todas funciona bien excepto de >>> actualizar el campo total de la tabla limpieza_colector >>> >>> lo que ocurre aqui es que desde qgis se dibuja una linea y al momento de >>> grabar ejecuto el trigger alguien tiene alguna experiencia de postgres con >>> qgis. >>> >>> Que me de alguna luz porque el trigger no actualiza el campo en la tabla >>> a que podria deberse si todo lo demas funciona sin problemas >>> >>> Atte >>> >>> -- >>> José Mercedes Venegas Acevedo >>> cel Mov RPC 964185205 >>> >>> >>> > > -- > José Mercedes Venegas Acevedo > cel Mov RPC 964185205 > > > -- José Mercedes Venegas Acevedo cel Mov RPC 964185205